AJAX не передает POST-переменные в IE7 / IE8 - PullRequest
4 голосов
/ 02 июня 2010

Обратите внимание: ответы в духе «использовать jquery» или «использовать (вставить хорошо известную структуру)» не помогают. Фреймворки, такие как jquery, включают в себя много дополнительного кода, который совсем не нужен для того, что я делаю. «Но вы можете включить один из Google», да, это может быть так, но я предпочитаю придерживаться своего собственного кода. Имея это в виду, давайте перейдем к проблеме ....

У меня есть вызов ajax, который не пропускает переменные POST в IE7 / IE8, но только в нечетных случаях. Похоже, что это очень случайно, и в большинстве случаев это работает.

Я посмотрел на jquery и не вижу большой разницы в его работе по сравнению с этим.

Вот функция ajax:

function GetXmlHttpObject(handler){ 
  var objxml = null;
 if(handler==null) {
  handler = function() {}
 }

   var ProgID = ["Msxml2.XMLHTTP.6.0", "Msxml2.XMLHTTP.3.0","Msxml2.XMLHTTP", "Microsoft.XMLHTTP"];              

     try {  
         objxml = new XMLHttpRequest();  
     }  
     catch(e) {  
         for (var i = 0; i < ProgID.length; i++){  
             try {  
                 objxml = new ActiveXObject(ProgID[i]);  
             }  
             catch(e) {  
                 continue;  
            }  
         }  
     } 
 objxml.onreadystatechange=handler;

     return objxml;  
}

Функция, которая вызывает функцию Ajax, будет выглядеть так:

function sample_ajax(object_type,object_id) {
 var d = new Date();
 var time = d.getTime();
 var url= MYSITEURL + "my_ajax_script.php?timestamp="+time;

 params = "object_type="+object_type+"&object_id="+object_id;
 xmlHttp_comment_notifyreset = GetXmlHttpObject(sample_ajax_helper);//fails on safari 1
 xmlHttp_comment_notifyreset.open("POST", url , true);

 xmlHttp_comment_notifyreset.setRequestHeader("Cache-Control", "no-cache");
 xmlHttp_comment_notifyreset.setRequestHeader("Cache-Control", "no-store");
 xmlHttp_comment_notifyreset.setRequestHeader("Cache-Control", "must-revalidate");
 xmlHttp_comment_notifyreset.setRequestHeader("Cache-Control", "post-check=0");
 xmlHttp_comment_notifyreset.setRequestHeader("Cache-Control", "pre-check=0");
 xmlHttp_comment_notifyreset.setRequestHeader("If-Modified-Since", "Sat, 1 Jan 2000 00:00:00 GMT");


 xmlHttp_comment_notifyreset.setRequestHeader("Content-Type", "application/x-www-form-URLencoded");
 xmlHttp_comment_notifyreset.setRequestHeader("Content-Length", params.length);
 xmlHttp_comment_notifyreset.setRequestHeader("Connection", "close");

 xmlHttp_comment_notifyreset.send(params);
}

Я посмотрел на jquery и не вижу большой разницы в том, как он работает, по сравнению с этим.

Ответы [ 6 ]

2 голосов
/ 17 июля 2010

Если параметры не могут быть отправлены только иногда, проблема может быть в этой строке:

params = "object_type="+object_type+"&object_id="+object_id;

Параметры не экранируются. Попробуйте это:

params = "object_type=" +
         encodeURIComponent(object_type) +
         "&object_id=" +
         encodeURIComponent(object_id);
0 голосов
/ 19 июля 2010

Try http://php.net/manual/en/reserved.variables.httprawpostdata.php в PHP, чтобы получить входные переменные, как парень ASP.net

0 голосов
/ 19 июля 2010

Я не помню, чтобы когда-либо видел тип контента с заглавными символами, такими как "application / x-www-form-URLencoded", и я не знаю, будет ли это в спецификации. Я видел , однако, PHP игнорирует POST из-за отсутствия заголовка Content-Type в запросе. (из-за прокси-сервера, который решил его опустить)

PHP игнорирует любой тип контента, который он не распознает. Шансы на то, что это что-то исправит, невелики, но вы можете попробовать изменить URL на url.

0 голосов
/ 17 июля 2010

У меня была похожая проблема с jquery, когда параметры записи не проходили Это было больше связано с тем, как asp.net считывал параметры записей. Следующая статья демонстрирует, как вы можете извлечь параметры записи непосредственно из входного потока по запросу. http://www.bytechaser.com/en/functions/2jxhy5gg7w/read-ajax-post-parameters-in-asp-net.aspx. Надеюсь, это поможет

0 голосов
/ 12 июля 2010

Это не очень помогает, но эта статья кажется довольно подробной: https://developer.mozilla.org/en/AJAX:Getting_Started

0 голосов
/ 12 июля 2010

Использование Конечный объект Ajax . Он лаконичен, не требует пояснений и работает во всех браузерах.

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