为什么我的jqxhr.responseText变量未定义,当它在xhr对象中设置时?

时间:2012-01-19 21:28:33

标签: jquery coldfusion

我在这里有一个真正简单的jquery get调用,我希望稍后在脚本中使用该响应。所以,如果我这样做:

var xhr = $.get('cfc/partsDefinition.cfc',{
                method: 'checkValid',
                search: 'some search string'
            }
        );
        console.log(xhr);
        console.log(xhr.responseText);

我可以看到A)第一个日志显示了一个有效的jqxhr对象,其responseText属性设置为我期望的...

promise: function (a){if(a==null)a=h;else for(var b in h)a[b]=h[b];return a}
readyState: 4
responseText: "0"
setRequestHeader: function (a,b){if(!s){var c=a.toLowerCase();a=m[c]=m[c]||a,l[a]=b}return this}

但是B)第二个日志显示“未定义”。我在这里缺少什么?

2 个答案:

答案 0 :(得分:4)

它显示undefined,因为在代码中的那一点,它是未定义的。 AJAX是异步的,这意味着在代码运行之后它不会在代码之前完成。在ajax调用完成之前,responseText将是未定义的。这是一个例子:

var xhr = $.get('cfc/partsDefinition.cfc',{
                method: 'checkValid',
                search: 'some search string'
            }
        ).done(function(data){
            console.log("xhr",xhr);
            console.log("xhr.responseText",xhr.responseText);
            console.log("data",data);
        });
console.log("This should happen before the other console logs");

答案 1 :(得分:1)

同意 - 当你不在的时候,你可能会抛弃它;尝试添加一些错误处理:

        $.get('cfc/partsDefinition.cfc',{
                method: 'checkValid',
                search: 'some search string'
            },
            function(data, textStatus, jqXHR){ // Success Case
                console.log(data);
                console.log(jqXHR);
            }
        );

        $('.errorContainer').ajaxError(function(event, jqXHR, ajaxSettings, thrownError){
                    $(this).append('ohhhhz noooz - ajax error');
            console.log(event);
            console.log(jqXHR);
            console.log(ajaxSettings);
            console.log(thrownError);
        });

在jQuery中,get()简写没有任何内置的错误处理 - 它只是压制它。因此,如果您正在尝试捕获某些内容,则需要创建自己的错误处理程序。

http://api.jquery.com/ajaxError/