【发布时间】:2016-10-22 00:09:54
【问题描述】:
我知道这是我的一个误解,我正在努力了解我做错了什么,我真的可以使用一些帮助。
我有一个成功的 ajax 请求并返回数据就好了。 Api 返回一个错误代码,然后我尝试根据给定的代码返回响应,除了该函数仅返回 ajax 调用传递的内容。
function getData(){
var promise = $.ajax({
url: 'api.php',
type: 'POST',
dataType: 'json'
});
return promise.done(function(data){
console.log(data);
if(data.errorCode === 0){
return data;
} else {
return 'failed';
}
});
}
$(document).ready(function(){
$('.btn').click(function(){
var apiData = getData();
console.log(apiData);
});
});
所以如果 api 返回一个非 0 的错误代码,那么函数 getData 应该返回一个“失败”字符串,除了它返回数据元素。我知道代码不是0,因为console.log显示代码是999。我做错了什么?为什么我不能让它返回我的“失败”字符串?
【问题讨论】:
-
发布您如何使用 getData。
-
dfsq 所说的。特别是,如果您正在执行
if (getData() == "failed")并期望它表明它失败了,那就是问题所在。getData返回一个 promise(jQuery 风格),而不是data或"failed"。 -
你永远不能直接从异步调用中返回。 Promise 并不是什么魔法,可以让这一切变得不那么真实。
getData()的调用者不会立即访问结果。你能做的最好的就是从回调中恢复你的逻辑。无论你是否使用 Promises,都是如此。 -
更新了代码以显示我是如何调用 getData() 函数的。
-
TJ,所以如果我理解这一点的话。 if 语句中的第一个 return 是我的字符串,然后 promise.done() 的 return 覆盖第一个 return 并将其更改为 .done() 传递的数据。所以它是这样做的;返回='失败';返回 = 数据;
标签: javascript jquery ajax promise