Я пытаюсь отправить форму через Ajax с JavaScript. Он работает в IE, Firefox, Chrome и iOS в Browserstack, но не работает в iOS Simulator, реальном устройстве iOS или настольном Safari.
Я пробовал XMLHttpRequest onload
и XMLHttpRequest onreadystatechange
, ни один не запускается. Насколько я могу сказать, request.open('POST', url, true);
не работает. console.log('2');
никогда не срабатывает.
Я добавил это для отладки:
request.send(data);
console.log(request);
setTimeout(function(){ console.log(request); }, 3000);
Они оба возвращают readyState: 1 в Safari, в других браузерах первый возвращает readyState: 1 , а второй возвращает readyState: 4 , как и ожидалось .
Вот мой код, сравненный с основными:
$('.ajax-form').submit(function(event) {
var form = event.target;
var data = new FormData(form);
var request = new XMLHttpRequest();
var method = form.getAttribute("method");
var action = form.getAttribute("action");
var url = window.location.href
request.open('POST', url, true);
request.setRequestHeader("X-Requested-With", "XMLHttpRequest");
request.setRequestHeader("HTTP_X_REQUESTED_WITH", "XMLHttpRequest");
request.setRequestHeader("pragma", "no-cache");
console.log('1');
request.onreadystatechange = function() {
console.log('2');
if (request.readyState === 4 && request.status === 200) {
var response = JSON.parse(request.response);
if (response.success && response.finished) {
// Go to selected success page
window.location.href = $(form).find('[name="formReturnUrl"]').attr('value');
} else if (response.errors || response.formErrors) {
// Deal with errors
}
}
};
request.send(data);
console.log(request);
setTimeout(function() {
console.log(request);
}, 3000);
event.preventDefault();
});
Все мои тесты iOS проводятся на iOS 11 в Safari. Я прочитал несколько вещей о странности iOS, но я не нашел решение, которое работает для меня. Что я делаю не так?