Firefox пустой POST с $ .ajax - PullRequest
       17

Firefox пустой POST с $ .ajax

2 голосов
/ 18 августа 2010

У меня есть функция jQuery, которая отправляет на сервер, используя $ .ajax, и она отлично работает в IE, Chrome и Safari, но в Firefox сервер не получает значения POST. Когда я запрашиваю коллекцию форм (используя классический ASP), я получаю undefined для всех значений

 $.ajax({
    type: 'POST',
    url: url,
    dataType: "text",
    data: { value1: true, value2: false },
    success: function(html) {
       // removed for clarity
    },
    error: function(xhr, ajaxOptions, thrownError) {
       // removed for clarity
    }

Он определенно поражает сервер, и когда я смотрю на значения в FireBug, он показывает именно то, что я ожидал бы для POST, но где-то данные пропадают

Чтобы еще больше запутать, я запускаю его на IIS локально, он отлично работает во всех браузерах.

Он не выполняет междоменную публикацию, поскольку URL генерируется в зависимости от того, на каком домене он работает, поэтому я не оставил никаких жестко закодированных значений, которые могли бы вызвать проблему

Думаю, что-то простое я пропустил, но что касается жизни, я не вижу, что

1 Ответ

3 голосов
/ 23 августа 2010

Краткий ответ:

При отправке HTTP POST большинство браузеров (насколько я могу судить, все браузеры (за исключением Firefox) отправляют заголовки HTTP-запроса в одном кадре TCP / IP, а затем начинаютсвежий второй кадр для фактических данных POST, даже если они (теоретически) все могут поместиться в одном кадре.Firefox этого не делает - он отправляет данные POST в том же фрейме, что и заголовки запроса, распределяясь на несколько фреймов, только если общий запрос (заголовки + данные POST) не помещается в один фрейм.Кажется, в IIS 7.0 есть ошибка, заключающаяся в том, что когда HTTP-запрос POST обрабатывается пользовательской страницей обработчика ошибок 404, любые данные POST, содержащиеся в том же фрейме TCP, что и первоначальный запрос, отбрасываются.

Грязная грязьОбходной путь должен гарантировать, что первое, что в вашей форме - это заполнение 1460 байт - <input type="hidden" name="padding" value="xxxxxxx...." /> должно это сделать, а второе - фиктивная пара имя / значение, чтобы обойти ошибки синтаксического анализа, вызванные заполнением - <input type="hidden" name="splitter" value="1" />.Затем последующие значения формы должны отображаться как обычно в коллекции Request.Form.

Подробный ответ и объяснение того, как мы работали, см. в этом посте в моем блоге .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...