首先,我是一个完整的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?
提前预订
答案 0 :(得分:1)
$.post
方法是对预定义某些参数的$.ajax
调用的简写。
从the documentation on the ajax
function from jQuery's website开始,complete
回调传递两个参数:jqXHR
和textStatus
,其中jqXHR
是实际的XMLHTTPRequest
对象。
所以这是你要传递给处理程序的第二个参数:
.complete(function(jqXHR, responseText) {
actionFunction(responseText);
});
请注意,作为Dave Ward says in his answer,responseText
在这种情况下实际上只是一个状态指示器,如“成功”或“错误”(因此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将自动使用您期望的参数调用。