我正在尝试将函数传递给变量(req):
var req;
$('#complete-field').bind('keyup', function() {
var url = prefixUrl + escape($('#complete-field').val());
req = function() {
if (window.XMLHttpRequest) {
if (navigator.userAgent.indexOf('MSIE') != -1) {
isIE = true;
}
return new XMLHttpRequest();
} else if (window.ActiveXObject) {
isIE = true;
return new ActiveXObject("Microsoft.XMLHTTP");
}
};
req.open("GET", url, true);
req.onreadystatechange = callback;
req.send(null);
});
但我总是得到以下错误:
req.open不是一个函数 req.open(“GET”,url,true);
任何想法如何解决这个问题。 非常感谢
答案 0 :(得分:1)
你应该命名你的功能并调用它。
var req;
$('#complete-field').bind('keyup', function() {
var url = prefixUrl + escape($('#complete-field').val());
function ajaxObject() {
if (window.XMLHttpRequest) {
if (navigator.userAgent.indexOf('MSIE') != -1) {
isIE = true;
}
return new XMLHttpRequest();
} else if (window.ActiveXObject) {
isIE = true;
return new ActiveXObject("Microsoft.XMLHTTP");
}
};
req = ajaxObject();
req.open("GET", url, true);
req.onreadystatechange = callback;
req.send(null);
});
您的代码会将整个函数存储到req
变量中..而不是它的返回值(它从未被调用过。)
答案 1 :(得分:0)
您的req变量是指一个函数。这意味着您可以使用括号调用它,如
req()
结果将是一个XmlHttpRequest,然后您可以调用open和其他函数。
此外,请注意,您似乎正在尝试重新发明轮子,jquery已经通过$ .ajax和类似的API支持跨浏览器XHR。
答案 2 :(得分:0)
您需要编写req()
而不是req.
,因为您执行req会返回您需要的对象:
var request = req();
request.open("GET", url, true);
request.onreadystatechange = callback;
request.send(null);
答案 3 :(得分:0)
您想要执行该功能并将结果保存到变量:
req = (function() {
if (window.XMLHttpRequest) {
if (navigator.userAgent.indexOf('MSIE') != -1) {
isIE = true;
}
return new XMLHttpRequest();
} else if (window.ActiveXObject) {
isIE = true;
return new ActiveXObject("Microsoft.XMLHTTP");
}
})();
答案 4 :(得分:0)
在您调用req.open()
时,变量req
包含一个函数,而不是XMLHTTP对象。该功能尚未执行。
要执行声明的功能,请将()
添加到结尾。
req = function() {
...
}();
答案 5 :(得分:0)
您正在将函数的引用放在变量中。使用这个:
var req;
req = function() {
...
}
基本上与:
相同function req() {
...
}
(在这种情况下,范围当然会有所不同,因为你在事件处理者之外声明了变量。)
问题在于您如何使用该功能。函数和它的返回值不一样,你必须调用函数来获取返回值:
var xhr = req();
现在您可以使用返回值:
xhr.open("GET", url, true);
xhr.onreadystatechange = callback;
xhr.send(null);
答案 6 :(得分:0)
我将它用于本机AJAX:
(window.ActiveXObject) ? httpRequest = new ActiveXObject("Microsoft.XMLHTTP") : httpRequest = new XMLHttpRequest();
httpRequest.open('POST', 'btAppendX.php', true);
httpRequest.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded; charset=UTF-8');
httpRequest.onreadystatechange = function () { (httpRequest.readyState == 4 && httpRequest.status == 200) ? responseData(httpRequest) : window.status = httpRequest.statusText;}
httpRequest.send(zAllInOne);
压缩......