未捕获的TypeError:无法读取未定义的属性'responseText'

时间:2013-06-01 15:30:02

标签: javascript ajax

我的网站上有一个注册页面,问题是我开始出现这个错误:

未捕获的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参数说明:

  1. xhr object
  2. 位置
  3. onreadystatechange handler
  4. 同步(即使我将通过也无法正常工作)
  5. 方法
  6. 标题
  7. key = value pair(我测试了它以便得到正确的值)
  8. 这是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浏览器中)一切正常,但是我得到了我在控制台选项卡中提到的错误,如果有人可以看看我会非常感激。

2 个答案:

答案 0 :(得分:1)

如果您尝试使用ajax并使用jQuery,请使用$.ajaxfriends

$.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"){