2012-03-31 68 views
2

我正在努力設置一個函數的返回值到其Ajax調用的JSON響應。如何將函數的返回值設置爲其ajax調用的json響應?

function callMe() {  
    $.ajax({ 
     url: "someJson.php", 
     type: "GET", 
     dataType: 'json',    
     success: function(response){ 
      return response; 
    } 
} 

var jsonResponse = callMe(); 

如何讓我得到jsonReponse到持有JSON響應?

+0

看到http://stackoverflow.com/questions/1572610/ajax-jquery-synchronous-callback-success – bnieland 2012-03-31 02:55:20

回答

1

這是不可能的默認,因爲AJAX是異步的;因此,一旦發送了ajax請求,該函數就會繼續,並且不會等到ajax調用返回,然後再結束該函數。在ajax調用成功的時候,最好做任何你需要的事情。

編輯:

可以使Ajax調用同步的,但是,不建議這樣做,因爲它可以鎖住瀏覽器。

請注意,同步請求可能會暫時鎖定瀏覽器, 禁用請求處於活動狀態時的任何操作。

jQuery Ajax Info

+0

所以,這個_is_可能只是不推薦。 – iambriansreed 2012-03-31 03:23:33

+0

默認情況下是不可能的。如何告訴他如何做一些不好的做法並令人不悅呢? – 2012-03-31 03:25:54

+0

取決於**的定義是**。 – iambriansreed 2012-03-31 03:27:30

-1

做這樣的:

function callMe() { 
    var result = false; 
    $.ajax({ 
     url: "someJson.php", 
     type: "GET", 
     async: false, 
     dataType: 'json',    
     success: function(response){ 
      result = response; 
      return response; 
    } 
    return result; 
} 

var jsonResponse = callMe(); 
+1

不,不,不,不,不... – canon 2012-03-31 02:49:32

+0

@antisanity爲什麼不能? – 2012-03-31 02:51:03

+0

查看jmein的回答。 – canon 2012-03-31 02:54:37

1

因爲jQuery AJAX的默認的行爲是異步模式下,你不能直接得到響應。 至少,你有兩個選擇:

  1. 通過FUNC作爲參數傳入「呼我」:
function callMe(callback) { 
    $.ajax({ 
     url: "someJson.php", 
     type: "GET", 
     dataType: 'json',    
     success: function(response){ 
      callback(response); 
     } 
    }); 
} 

function dealResponse(response) { 
    // do something with response 
} 

callMe(dealResponse); 
  1. 使用同步模式阿賈克斯,並使用你的代碼中直接得到響應和處理用它。但是如果你這樣做,你的腳本會阻塞,並且可能會在ajax請求開始時暫時鎖定瀏覽器,直到請求結束。
function callMe() { 
    var ret; 

    $.ajax({ 
    url: "someJson.php", 
    type: "GET", 
    async 
    dataType: 'json',    
    success: function(response){ 
     ret = response; 
    } 
    }); 

    retun ret; 
} 

var jsonResponse = callMe(); 

希望這些可以幫助你:)

相關問題