请注意:“使用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,与这个自定义的方式相比,它的工作方式看不出太多差异。
答案 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家伙