我为jQuery的$ .ajax()方法创建了一个包装器函数,所以我可以传递不同的dataTypes和post变量 - 就像这样:
function doPost(dType, postData, uri){
$.ajax({
url: SITE_URL + uri,
dataType: dType,
data: postData,
success: function(data){
return data;
});
}
我遇到的问题是将数据(总是JSON)退出。我尝试在$ .ajax()函数调用之前设置var ret
并在success函数中将其设置为ret = data
。我对此愚蠢吗?如果我没有设置成功函数,$ .ajax只会返回数据吗?或者只是success: return data
?或success
是否需要回调函数来处理数据,这可能只是return data
?
答案 0 :(得分:1)
当你调用$ .ajax()时,它会创建请求,然后继续下一步。它不会坐下来等待返回并阻止下一行代码。这意味着除非成功回调函数无法返回doPost函数的数据值。
如果你真的想拥有一个包装函数,那么你可以这样做:
function doPost(dType, postData, uri, success){
$.ajax({
url: SITE_URL + uri,
dataType: dType,
data: postData,
success: success
});
}
当你调用doPost时定义你的成功处理程序,但是包装函数在这一点上对你来说确实没什么用。
答案 1 :(得分:1)
嗯,你在一个函数内 - 利用可变范围; - )
function doPost(dType, postData, uri) {
var result;
$.ajax({
url: SITE_URL + uri,
dataType: dType,
data: postData,
async: false,
success: function(data){
result = data;
});
return result;
}
这实际上有效,但我想async
部分是强制性的......否则$.ajax
的调用会立即返回,而result
仍然未定义 - 你会永远函数调用得到undefined
。
但是,当$.ajax
调用同步时,它会一直阻塞,直到收到数据为止,您可以将数据作为自己函数的result
返回。
但是你必须清楚,当使用这个方法时,在ajax加载完成之前不会执行任何其他代码!