我尝试从同一项目中的本地api获取对象,但在ajax调用之后,产品变量is始终未定义。
我没有收到来自ajax调用的任何错误消息,它返回到success函数并执行不同的日志命令。 我认为这是一个小数问题所以我把它们改成字符串,但结果相同。我开始使用$ .getJSON,但改为$ .ajax只是为了看看它是否解决了它。
_JS.js 中的GetProduct :
GetProduct: function (id) {
this.Log("JS GetProduct. Id: " + id);
$.ajax({
url: this.apiBaseUrl + "GetProduct?id=" + id,
dataType: 'json',
success: function (data) {
_JS.Log("Product fetched");
_JS.LogInfo(data);
return data;
},
error: function (xhr, status, error) {
_JS.LogError(error);
}
});
}
对 GetProduct :
的调用var product = _JS.GetProduct(productId);
(在此行之后,产品未定义,但没有说明原因)
json结果:
{
"id": 1,
"name": "Navn på norsk som er ganske langt",
"description": "Norsk forklaring",
"price": 11,
"subscriptionPrice": "9,90",
"subscriptionDiff": "1,10",
"priceFormated": "kr. 11,-",
"subscriptionPriceFormated": "kr. 9,90,-",
"subscriptionPriceDiffFormated": "kr. 1,10,-",
"isSubscription": 1
}
我没有遇到任何其他ajax调用相同api(不同方法)的问题。
答案 0 :(得分:0)
由于声誉太低,我无法发表评论所以我必须写一个答案。
您正在进行异步调用,因此您不会通过典型的同步javascript调用方式获得任何结果。
我尝试解释原因:您向服务器发送请求。该请求是异步处理的,因此无论响应是否已被发送,您的代码都将被执行。因为您的JS代码比来自服务器的响应更快,所以您将得到未定义的。 (想象一下,服务器非常慢,答案需要几分钟)。
面对此问题的最常见方法是使用回调或承诺。 见How do I return the response from an asynchronous call?