在执行没有错误的ajax调用之后,变量始终未定义

时间:2017-08-22 14:10:01

标签: javascript jquery

我尝试从同一项目中的本地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(不同方法)的问题。

1 个答案:

答案 0 :(得分:0)

由于声誉太低,我无法发表评论所以我必须写一个答案。

您正在进行异步调用,因此您不会通过典型的同步javascript调用方式获得任何结果。

我尝试解释原因:您向服务器发送请求。该请求是异步处理的,因此无论响应是否已被发送,您的代码都将被执行。因为您的JS代码比来自服务器的响应更快,所以您将得到未定义的。 (想象一下,服务器非常慢,答案需要几分钟)。

面对此问题的最常见方法是使用回调或承诺。 见How do I return the response from an asynchronous call?