jQuery / Ajax IE7 - длинные запросы терпят неудачу - PullRequest
1 голос
/ 08 июня 2010

У меня проблема с IE7, связанная с вызовом ajax, выполняемым функцией jQuery.load.

В основном запрос работает в тех случаях, когда строка URL-адреса не слишком длинная, но как только URL-адрес становится очень большим, он завершается неудачно. Делая некоторую отладку при вызове Ajax, я обнаружил эту ошибку:

URL: <blanked out security reasons but it's very long>
Content Type: 
Headers size (bytes): 0
Data size (bytes): 0
Total size (bytes): 0
Transferred data size (bytes): 0
Cached data: No
Error result: 0x800c0005
Error constant: INET_E_RESOURCE_NOT_FOUND
Error description: The server or proxy was not found
Extended error result: 0x7a
Extended error description: The data area passed to a system call is too small.

Как видите, похоже, что ничего не отправляется. Теперь это происходит только в IE7, но не в других браузерах, в IE8 есть небольшая задержка, но она все еще работает. Тот же запрос отлично работает, когда строка URL-адреса относительно мала.

Теперь мне нужно, чтобы это работало в IE7 по причинам совместимости, и я не могу найти обходные пути для этого.

Фактический вызов AJAX выглядит так:

$("ID").load("url?lotsofparams",callbac func(){}); 

«Лоты» могут быть разными, иногда маленькими или очень большими. Когда строка очень большая, я получаю вышеуказанную ошибку только для IE7.

Ответы [ 3 ]

4 голосов
/ 08 июня 2010

, так как при загрузке используется метод HTTP Get, существует ограничение на размер URL, который, насколько я знаю, составляет 4 КБ.Поэтому вместо GET используйте $ .ajax с опцией HTTP Post.Сообщение не имеет ограничений.

используйте следующий код.

$.ajax({
                url: url,
                type: "POST",
                async: true,
                data: {name1: value1, name2: value2, ...}, // put your data.
                success: function(data, textStatus) {
                 $("ID").html(data);

               }
       });
4 голосов
/ 08 июня 2010

Не помещайте query string parameters в URL.

Второй параметр .load () предназначен именно для этого. Должно быть:

$("ID").load("url", {
    foo:     "bar",
    morefoo: "morebar"
},callbac func(){}); 

или вы можете использовать $. Post ()

$.post("url", {
    foo:     "bar",
    morefoo: "morebar"
}, function(data){
   alert(data);
});

Поскольку .load() будет внутренне использовать запрос POST при анализе объекта, вы можете заменить его на $. Get () , если вам требуется запрос "GET".

0 голосов
/ 18 января 2013

Я столкнулся с этой же проблемой. Я отправлял все через URL (длинная строка запроса), и это не удавалось. Я обнаружил, что ключом является отправка данных в своем собственном параметре (в данном примере это dataparms), который является просто разделом строки запроса в URL.

$. Ajax ({тип: "POST", URL: URL, данные: dataparams, dataType: "html", async: false});

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