AJAX没有在IE7 / IE8中传递POST变量

时间:2010-06-02 08:45:22

标签: javascript ajax internet-explorer post

请注意:“使用jquery”或“使用(插入已知框架)”的答案没有帮助。诸如jquery之类的框架包含许多额外的代码,这些代码对于我正在做的事情根本不是必需的。 “但是,你可以在谷歌中加入一个',是的,可能就是这样,但我更喜欢保留自己的代码。考虑到这一点,让我们继续解决问题....

我有一个ajax调用,它不通过IE7 / IE8上的POST变量,但仅在奇数情况下。它看起来非常随意,而且大部分时间都有效。

我看过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 个答案:

答案 0 :(得分:2)

如果params有时无法发送,问题可能出在这一行:

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

params没有被逃脱。试试这个:

params = "object_type=" +
         encodeURIComponent(object_type) +
         "&object_id=" +
         encodeURIComponent(object_id);

答案 1 :(得分:0)

使用The Ultimate Ajax Object。它简洁,不言自明,适用于所有浏览器。

答案 2 :(得分:0)

这不是很多帮助,但这篇文章看起来非常详细:https://developer.mozilla.org/en/AJAX:Getting_Started

答案 3 :(得分:0)

我遇到了类似jquery的问题,其中post参数没有通过。这更多地与asp.net阅读帖子参数的方式有关。 下面的文章演示了如何直接从请求的输入流中提取post参数。 http://www.bytechaser.com/en/functions/2jxhy5gg7w/read-ajax-post-parameters-in-asp-net.aspx。希望它有所帮助

答案 4 :(得分:0)

我记不起曾经看过像“application / x-www-form-URLencoded”这样的大写字符的内容类型,我不知道它是否符合规范。我已经看到了,但是,由于请求中缺少Content-Type标头,PHP忽略了POST。 (由于代理商决定将其排除在外)

PHP会忽略它无法识别的任何内容类型。这可能会解决任何问题,但您可能会尝试将URL更改为url

答案 5 :(得分:0)

尝试 http://php.net/manual/en/reserved.variables.httprawpostdata.php 在PHP中获取输入变量,如ASP.net家伙