我的网站上有一个注册页面,问题是我开始出现这个错误:
未捕获的TypeError:无法读取未定义的属性'responseText'
拒绝设置不安全标头“内容长度”register.php:1
拒绝设置不安全的标题“连接”
即使没有最后2个错误(如果我没有设置连接,内容长度标题),我将收到第一个错误。
对于我的ajax功能,我正在使用此功能:
function AjaxLoad(xhr, url, cfunc, syn, method, headers, params)
{
if (window.XMLHttpRequest) {
xhr = new XMLHttpRequest();
} else {
xhr = new ActiveXObject("Microsoft.XMLHTTP");
}
xhr.onreadystatechange = cfunc; // This line take place on true/false
xhr.open(method, url, syn);
$.each(headers ,function(index, value){
xhr.setRequestHeader(index, value);
});
xhr.send(params);
}
在我的js代码中,我正在调用这样的函数:
var headersObject = {"Content-type" : "application/x-www-form-urlencoded", "Content-length" : userCap.val().length, "Connection" : "close" };
AjaxLoad(
xhr,
"../php/Ajax/captchaValidator.php",
getResponse,
false,
"POST",
headersObject,
userCap.attr("name") + "=" + encodeURIComponent(userCap.val())
);
AjaxLoad参数说明:
这是getResponse函数:
function getResponse(){ var strongEl = capCon.next(); if(xhr.responseText == "0"){ if(strongEl.prop("tagName") == "STRONG"){ strongEl.getReplace('<strong id="sE">קוד שגוי</strong>'); }else{ capCon.after('<strong id="sE">קוד שגוי</strong>').next(); } bToSubmit = false; }else{ if(strongEl.prop("tagName") == "STRONG"){ strongEl.remove(); } } }
我测试网络以查看文件 captchaValidator.php 是否甚至到达浏览器并且我获得状态200一切似乎都没问题。
我测试了正确的值,代码在我不知道发生了什么变化之前确实有效,但这是我的网站注册页面Link的链接,如果你按发送,你可以看到(在网络选项卡的Chrome浏览器中)一切正常,但是我得到了我在控制台选项卡中提到的错误,如果有人可以看看我会非常感激。
答案 0 :(得分:1)
如果您尝试使用ajax并使用jQuery,请使用$.ajax
和friends:
$.post(
"../php/Ajax/captchaValidator.php",
userCap.attr("name") + "=" + encodeURIComponent(userCap.val()),
function(responseData) {
//...
}
)
您的代码无效,因为变量xhr
不在getResponse
的范围内。您可以在事件处理程序中使用this
而不是xhr
来引用XHR对象。
答案 1 :(得分:1)
如错误所示,xhr
变量未定义。快速浏览getResponse
函数,您可以看到它可能不在范围内。作为AjaxLoad
的参数的那个是该函数的本地函数(顺便说一下,将它作为参数似乎是无用的,因为你做的第一件事是分配它),以及你作为参数传递的函数您的调用可能是undefined
或来自不同的范围。
相反,您可以使用this
keyword从事件处理程序访问当前的XMLHttpRequest
对象。将您的代码更改为
if (this.responseText == "0"){