2010-08-18 3 views
2

У меня есть функция 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 генерируется в зависимости от того, какой домен он работает на, так что я не оставил никаких жестко закодированные значения в том, что может быть причиной проблемы

Я предполагаю, что это Somthing просто я скучал, но для жизни меня, я не могу видеть, что

ответ

3

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

При подаче HTTP POST, большинство браузеров (все, кроме Firefox, насколько я могу сказать) отправит заголовки HTTP-запросов в один кадр TCP/IP, а затем начнет новый второй кадр для фактических данных POST, даже если бы он мог (теоретический ly) все вписываются в один кадр. 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.

За длинный ответ и объяснение того, как мы все это работали, см. this post on my blog.

Смежные вопросы