[英]AJAX not passing POST vars in IE7/IE8
請注意:回答“使用jquery”或“使用(插入知名框架)”無濟於事。 諸如jquery之類的框架包含很多額外的代碼,這些代碼對於我正在做的事情根本不是必需的。 “但是,您可以包括Google提供的一個”,是的,可能是這樣,但是我更喜歡保留自己的代碼。 考慮到這一點,讓我們繼續解決問題。
我有一個ajax調用,它不會在IE7 / IE8上通過POST var,而只是在少數情況下才通過。 它似乎是非常隨機的,並且在大多數情況下都起作用。
我看過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,與這種自定義查詢相比,它的工作方式沒有太大區別。
如果有時僅無法發送參數,則問題可能出在此行:
params = "object_type="+object_type+"&object_id="+object_id;
參數無法逃脫。 嘗試這個:
params = "object_type=" +
encodeURIComponent(object_type) +
"&object_id=" +
encodeURIComponent(object_id);
使用Ultimate Ajax對象 。 簡潔明了,可在所有瀏覽器上使用。
並沒有很多幫助,但是這篇文章看起來很詳細: https : //developer.mozilla.org/en/AJAX : Getting_Started
我在jquery中遇到了類似的問題,其中post參數沒有通過。 這與asp.net讀取post參數的方式有關。 下面的文章演示了如何直接從請求的輸入流中提取post參數。 http://www.bytechaser.com/zh-CN/functions/2jxhy5gg7w/read-ajax-post-parameters-in-asp-net.aspx 。 希望能幫助到你
我不記得曾經見過具有大寫字符的內容類型,例如“ application / x-www-form-URLencoded”,而且我不知道它是否符合規范。 但是,我已經看到PHP由於請求中缺少Content-Type標頭而忽略了POST。 (由於代理決定將其省略)
PHP會忽略它無法識別的任何內容類型。 可以解決所有問題的可能性很小,但是您可以嘗試將URL
更改為url
。
嘗試使用php中的http://php.net/manual/en/reserved.variables.httprawpostdata.php來獲取輸入變量,例如ASP.net家伙
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.