簡體   English   中英

如何從調用 $.getJSON 的 function 返回一個值?

[英]How to return a value from a function that calls $.getJSON?

function lookupRemote(searchTerm)
{
   var defaultReturnValue = 1010;
   var returnValue = defaultReturnValue;

   $.getJSON(remote, function(data)
   {
      if (data != null)
      {
           $.each(data.items, function(i, item)
           {
               returnValue = item.libraryOfCongressNumber;
           });
      }
    });
    return returnValue;
}

為什么這個returnValue的返回值總是等於在 function 開頭設置的默認值,而不等於從 JSON 查找中檢索到的值?

發生這種情況是因為該回調函數( function(data) {...}稍后在響應返回時運行,因為它是一個異步函數。 設置好值后就使用它,如下所示:

function lookupRemote(searchTerm)
{
    var defaultReturnValue = 1010;
    var returnValue = defaultReturnValue;
    $.getJSON(remote, function(data) {           
        if (data != null) {
              $.each(data.items, function(i, item) {                 
                    returnValue = item.libraryOfCongressNumber;
              });
        }
        OtherFunctionThatUsesTheValue(returnValue);
     });
}

這就是所有異步行為的方式,一旦有了它,就開始需要任何值...這就是服務器響應數據的時候。

如果您不想使用異步功能,最好使用以下方法:

function getValue(){
   var value= $.ajax({ 
      url: 'http://www.abc.com', 
      async: false
   }).responseText;
   return value;
}

該函數等待,直到從服務器返回該值。

當對HTTP請求的響應 不是立即到達時,傳遞給getJSON的函數將運行。

return語句響應之前執行,因此尚未設置變量。

讓您的回調函數執行數據所需的操作。 不要試圖退貨。

const getJson = (path) => {
  return new Promise((resolve) => {
    $.getJSON(path, function (data) {
      setTimeout(() => {
        resolve(data);
      }, 1);
    });
  })
}
var result = await getJson('test.json');
console.log(result);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM