2017-08-22 48 views
0

我試圖從在同一項目中的本地API獲取的對象執行AJAX調用後不確定,但Ajax調用後產品 variabel總是未定義variabel總是沒有錯誤

我沒有從ajax調用中收到任何錯誤消息,它返回到成功函數並執行不同的日誌命令。 我認爲這是一個小數的問題,所以我改變它們爲字符串,但結果相同。我已經開始使用$ .getJSON,但是改爲$ .ajax來查看是否解決了這個問題。

GetProduct_JS.js

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

可能重複[如何從異步調用返回響應?](https://stackoverflow.com/questions/14220321/how-do-i-return-the-response-from-an -asynchronous-call) –

回答

0

我不能評論,因爲信譽太低,所以我不得不寫一個答案。

您正在進行異步調用,因此您將無法通過同步JavaScript調用的典型方式獲得任何結果。

我試圖解釋爲什麼:您發送請求到服務器。該請求被異步處理,因此無論響應是否已經發送,您的代碼都將被執行。由於您的JS代碼比來自服務器的響應速度更快,您將得到未定義的代碼。 (想象一下服務器非常慢,答案需要幾分鐘)。

面對此問題最常見的方法是使用回調或承諾。 請參閱How do I return the response from an asynchronous call?

+0

是的,謝謝。我明白我做錯了什麼。我認爲在通話結束時會調用成功功能。 – TheRuler

+0

_「我不能評論,因爲名譽太低,所以我必須寫一個答案。」_ - >請參閱[爲什麼我需要50點評論?我能做些什麼呢?](https://meta.stackexchange.com/questions/214173/why-do-i-need-50-reputation-to-comment-what-c​​an-i-do-teady)。 –