Неожиданное поведение jQuery AJAX в Windows XP

282
12 декабря 2016, 10:05

Здравствуйте! Столкнулся с такой интересной проблемой, есть некая веб-форма, данные которой передаются в фоне скрипту на php посредством jQuery (AJAX). А проблема следующая, есть три системы - Ubuntu, Windows 7, Windows XP, на всех стоят одинаковые версии браузеров (Chrome, Firefox). Если в первых двух всё работает без проблем, то в XP не срабатывает скрипт, либо возвращает ошибку Undefined Index для переданных значений. В чём может быть причина? Что необходимо дописать в скрипте, чтобы всё работало одинаково независимо от версии ОС?

Пример скрипта:

var content = $(this).serialize();
var fdata = new FormData();
fdata.append ('userfile', $('#userfile')[0].files[0])
fdata.append ('text', content);
$.ajax({
    type: method,
    url: action,
    processData: false,
    contentType: false,
    data: fdata,
    success: function(result){
    }
Answer 1

Ну судя по всему, на сервере вы пытаетесь достать из массива значение по ключу, которого в этом массиве нет. Собственно поэтому вы получаете: Undefined index.

Возможно на первых двух осях этой ошибки нет из за различных настроек PHP error reporting.

Я бы вам посоветовал научиться использовать дебаггер (он очень полезен при разработке).

Ну и еще бы я вам посоветовал более точно и без ошибок описывать ваши вопросы.

Answer 2

А вы уверены, что в других ОС скрипт работает, или так думаете, только потому что там ошибок нет. Проблема скорее всего в скрипте, а не в том, что разные ОС.
Выложите весь код и попробуйте протестировать работу во всех ОС ( именно протестировать: проверить, отправляется ли запрос и приходит ли ответ )

Answer 3

Проблема в некорректно передаваемом скриптом заголовке contentType, дело в том, что в скрипте неправильно расположены строки, получается что contentType передаётся раньше чем данные, соответственно не корректно передаются значения boundary. Корректный скрипт

var content = $(this).serialize(); 
var fdata = new FormData(); 
fdata.append('userfile', $('#userfile')[0].files[0]) 
fdata.append('text', content); 
$.ajax({ 
  type: method, 
  url: action, 
  data: fdata, 
  processData: false, 
  contentType: false, 
  success: function(result) {} 
})

READ ALSO
Как получить доступ к элементу background?

Как получить доступ к элементу background?

Добрый день, подскажите, пожалуйста, как можно решить следующую задачу

264
Почему jQuery countTo timer показывает только 100?

Почему jQuery countTo timer показывает только 100?

Всем привет! Подключаю плагин: https://githubcom/mhuggins/jquery-countTo/blob/master/readme

338
Failed to load resource: the server responded with a status of 404

Failed to load resource: the server responded with a status of 404

Failed to load resource: the server responded with a status of 404 (Not Found) в файле доменное-имяcom

253
Callback события click блокируется callbackом change?

Callback события click блокируется callbackом change?

Есть у меня на странице инпут и ссылкаЧеловек вводит что то в инпуте и нажимает ссылку, должны сработать оба события

242