2010-08-07 90 views
25

我想通過Ajax/$.getJSON使用jQuery來調用一些自定義API。

我想將自定義值傳遞到Ajax回調方法,但該值沒有得到通過,實際上被覆蓋。這是我的代碼:

var locationType = 3; 
var url = 'blah blah blah' + '&locationType=' + locationType; 

$("#loading_status").show(); 

$.getJSON(url, null, function(results, locationType) { 
    searchResults(results, locationType) 
}); 

locationType之前我使用AJAX調用的URL值是3。但在通話成功返回數據後,locationType的值現在爲success。這是因爲method signature of the callback是:

回調(數據,textStatus)如果 請求成功時執行的回調函數 。

如何將一個或多個參數傳遞給回調方法?

+0

的locationType變量是全局變量,所以你並不需要把它作爲參數,在anonimus回調函數變量是免費的,所以它是在周圍環境中尋找在這種情況下是全球環境。 – jcubic 2010-08-07 12:23:00

+1

@jcubic - 它不是一個* global *變量(它可能是,但可能不是),更準確地說,它在他所關注的範圍內是可用的。 – 2010-08-07 12:26:41

回答

19

你並不需要通過它,剛纔提到你已經有了變量,就像這樣:

var locationType = 3; 
var url = 'blah blah blah' + '&locationType=' + locationType; 
$("#loading_status").show(); 
$.getJSON(url, null, function(results) { 
    searchResults(results, locationType) 
}); 

也沒有必要通過null,如果你沒有一個數據對象,它是一個可選的參數和jQuery檢查第二個參數是一個函數或沒有,所以你可以這樣做:

$.getJSON(url, function(results) { 
    searchResults(results, locationType) 
}); 
+17

你必須小心這一點。對於一個固定值變量這是很有用的,但是如果你嘗試這樣做,例如,在locationType是索引的循環中,它在回調中的值將是回調執行時的值,而不是在定義。以防萬一! – 2012-10-05 07:18:40

+0

@DanibishOP:你會怎麼通過一個沒有固定價值的? – Espen 2014-12-12 14:23:54

+0

如果您進行了很多API調用,然後仍然需要知道哪個調用來自您正在加載的哪個ID,那麼非固定值可能會非常有用 – mitchken 2016-01-09 08:57:12

2

如果你想使用locationType回調(其值是3),只需使用

function(results) { ..... 

感謝closureslocationType將在回調自動可用。

18

函數中的翹曲,例如

function getResults(locationType) { 
    $.getJSON(url, null, function(results) { 
     searchResults(results, locationType) 
    }); 
} 

但在你的具體情況,你甚至不必通過它,你可以直接在回調訪問值。

+3

如果你正在做一個循環,並且每次調用$ .getJSON(),那麼封裝一個函數將保存該變量;否則,它將被覆蓋。 – yee379 2012-08-07 02:03:30

3

你可以使用.ajax方法:

var locationType = 3; 
var url = 'blah blah blah' + '&locationType=' + locationType; 
$.ajax({ 
    url: url, 
    context: { lt: locationType }, 
    success: function(results) { 
     searchResults(results, this.lt);  
    } 
}); 
+0

我相信上面的代碼中存在錯誤。當使用上下文設置時,「this」成爲回調函數中的上下文,所以代碼應該讀取searchResults(results,this.lt);而不是searchResults(results,this.context.lt);.我已經在上面進行了更正。 – 2014-09-17 21:18:02

0

可以嘗試:

function getResults(locationType) { 
    $.getJSON(url, {p1:'xxx', p2: 'yyy'}, function(results) { 
     searchResults(results, locationType) 
    }); 
} 
相關問題