如何访问jqxhr.complete函数中的响应文本

时间:2011-07-13 21:42:54

标签: javascript jquery

首先,我是一个完整的javascript和jQuery noob,所以如果这个问题愚蠢我很抱歉。但我真的没有在jQuery文档或谷歌上找到答案

我正在尝试在请求完成时对响应执行操作 但我无法访问responseText。我的印象是jqxhr objext有一个成员responseText。但我得到以下错误'responseText未定义'。

this.load = function(fileName, actionFunction){
    var jqxhr = $.post(SERVER,{command : "load", filename : fileName})
    .complete(function(){ 
        actionFunction(responseText);
    });
}

修改

如果我这样做

.complete(function(responseText){ actionFunction(responseText);}

或Dave Ward建议

我没有收到错误但没有任何反应

我知道它不是actionFunction(),因为如果我为了测试目的手动输入一个字符串,它就会按照我的预期去做。

当试图查看过去的参数时(将它打印到actionfunction中的控制台)我得到[object Object];甚至在尝试将其转换为字符串(String(参数))

结束编辑

我做错了什么或如何在.complete函数中访问responseText?

提前预订

2 个答案:

答案 0 :(得分:1)

$.post方法是对预定义某些参数的$.ajax调用的简写。

the documentation on the ajax function from jQuery's website开始,complete回调传递两个参数:jqXHRtextStatus,其中jqXHR是实际的XMLHTTPRequest对象。

所以这是你要传递给处理程序的第二个参数:

.complete(function(jqXHR, responseText) {
  actionFunction(responseText);
});

请注意,作为Dave Ward says in his answerresponseText在这种情况下实际上只是一个状态指示器,如“成功”或“错误”(因此jQuery的名称为“textStatus”)。如果你的变量名中有“response”这个词,我猜测(就像他)你可能想要success回调而不是complete

.success(function(data, textStatus, jqXHR) {
  actionFunction(renderDataToString(data));
});

答案 1 :(得分:0)

问题是你没有在匿名函数中捕获响应参数,所以当你从内部调用actionFunction时它没有被定义。你可以解决这个问题:

.complete(function(responseText) {
  actionFunction(responseText);
});

更好的是,你可以利用JavaScript的功能性质,只需将函数本身作为回调传递给.complete:

.complete(actionFunction);

您的actionFunction将自动使用您期望的参数调用。