Использование Python и JQuery здесь ..
Ранее мы отправляли с использованием обычного form.submit();
в submitHandler
вызова проверки (плагин JQuery).Это было передано в прозрачный URL-адрес перенаправления Брейнтри, где параметр redirect-to был установлен как обработчик GET на нашем сервере.Мы делаем подтверждение, а затем еще раз перенаправляем в наш обработчик.Если отправленные данные не прошли через braintree (скажем, плохая кредитная карта), мы записываем html в <div id="error">errormessage</div>
в ответе нашего обработчика, и это вставляется на страницу пользователя.
Проблема в том, что в нашем обработчике есть ошибка, которая выдает код состояния 500, все падает в ад, и страница пользователя ведет себя нежелательно.
Я хочу иметь возможность обработать ответ 500 от нашегообработчик, если это произойдет.
Я думал, что смогу сделать это, используя атрибут statusCode
в AJAX jQuery.
вот что я пробовал (в submitHandler
):
var data = $(form).serialize();
$.ajax({
type: 'POST',
url: braintree_url,
data: data,
statusCode: {
500: function() {
alert('broked response yo');
}
}
});
И затем я намеренно выдвигаю ошибку в нашем обработчике, чтобы заставить 500.
Но мой ajax, отправленный на URL Braintree, не работает.Однако form.submit();
работал нормально.
Что я делаю не так?Неправильно ли я думать, что форма может быть отправлена через AJAX, как это и привести к тому же результату?
FWIW, мы предоставляем ряд атрибутов для нашей HTML-формы, как показано ниже:
%form#addcard{"action": braintree_url, "method": "post", "autocomplete": "off", "submittype": "secure", "next": braintree_url, "target": "hidden_iframe")}
EDIT:
После некоторого прочтения о ajax я понял, что вероятная причина, по которой мои настройки здесь не работают, заключается в том, что они обращаются к другому домену (Braintree's) в нарушение той же политики происхождения.Таким образом, браузер не выполняет его.
from: http://api.jquery.com/jQuery.ajax/
Из-за ограничений безопасности браузера большинство запросов «Ajax» подчиняются той же политике происхождения;запрос не может успешно получить данные из другого домена, субдомена или протокола.