当我发出ajax请求时,我的onreadystatechange有问题,它曾用于调用该函数 现在它不会调用processRequest。
我不确定我是否编辑了某些东西或者是什么......可以帮助..
function createAjaxObject(url, callback)
{
/// @par Implementation
var req = init();
req.onreadystatechange = processRequest;
/// @brief Creates a ajax object based on the runnunf browser
function init()
{
if (window.XMLHttpRequest)
return new XMLHttpRequest();
else if (window.ActiveXObject)
return new ActiveXObject("Microsoft.XMLHTTP");
}
/// @brief Checks if request is complete and HTTP call is successful
function processRequest ()
{
/// readyState of 4 signifies request is complete
if (req.readyState == 4){
/// status of 200 signifies sucessful HTTP call
if (req.status == 200){
if (callback)
callback(req.responseXML);
}
}
}
this.doPost = function(param) {
if (req.readyState == 4) {
/// make a HTTP GET request to the URL asynchronously
req.open("POST",url, true);
req.setRequestHeader("Content-Type","application/x-www-form-urlencoded");
req.setRequestHeader("Content-length",param.length);
req.setRequestHeader("Connection", "close");
req.send(param);
}
}
}
感谢,
答案 0 :(得分:2)
这一行:
if (req.readyState == 4) {
...(以及相应的}
)不应出现在您分配给this.doPost
的函数中。 E.g:
this.doPost = function(param) {
/// make a HTTP GET request to the URL asynchronously
req.open("POST",url, true);
req.setRequestHeader("Content-Type","application/x-www-form-urlencoded");
req.setRequestHeader("Content-length",param.length);
req.setRequestHeader("Connection", "close");
req.send(param);
};
我假设您使用的方式是:
var obj = new createAjaxObject(url, callback);
obj.doPost();
...因为引用的代码实际上从不调用发布帖子的函数,而只是将它分配给this
上的属性。您为this
指定属性的通常位置是在构造函数中,因此我使用上面的new
。
(顺便说一句:JavaScript代码中的压倒性惯例是对用作构造函数的函数使用初始上限,例如CreateAjaxObject
[或者更好,仅AjaxObject
]而不是createAjaxObject
。)
我会对该代码进行其他更改束,但我认为这是最小的。
附注:我建议您使用JavaScript库,例如jQuery,Prototype,YUI,Closure或any of several others。它们平滑了很多的浏览器差异,并提供了大量经过良好测试的实用程序功能,让您专注于实际需要做的事情。