2011-09-17 94 views
0

我不確定這是否是一個愚蠢的問題...我想使用jQuery點擊事件來排序JSON數組。以下是我認爲應該工作的一個簡化的html代碼:

<SCRIPT type='text/javascript'> 

function results(json) { 
// display unsorted results in $('#results') 
} 

$('#sort').click(function (json) { 
// sort and display results in $('#results') 
}); 

var query = some_query; 
var json = new Object(); 
$.getJSON(query, results); 

</SCRIPT> 

<A href='javascript:void(0)' id='sort'>Sort</A> 
<DIV id='results'></DIV> 

單擊Sort鏈接時我沒有收到任何迴應。當我用alert(json)替換sort函數時,我得到一個json是undefined錯誤。我在這裏錯過了什麼嗎?

更多更新:

我修改了代碼,這應該工作。謝謝大家對你的貢獻:)

<SCRIPT type='text/javascript'> 

function results(json) { 
// display unsorted results in $('#results') 
$('#sort').click(function() {sort(json);}); 
} 

function sort(A) { 
var B = A.sort(sorting()); // function to sort the array 
results(B); 
} 

var query = some_query; 
$.getJSON(query, results); // triggered by listener 

</SCRIPT> 

<A href='javascript:void(0)' id='sort'>Sort</A> 
<DIV id='results'></DIV> 

回答

0

你只需要做出一些改動:

<SCRIPT type='text/javascript'> 

function results(data, textStatus, jqXHR) { 
    // display unsorted results in $('#results') 
    var json = data; 
} 

$('#sort').click(function() { 
    var query = some_query; 
    $.getJSON(url, query, results); 
}); 

</SCRIPT> 

<A href='javascript:void(0)' id='sort'>Sort</A> 
<DIV id='results'></DIV> 

results函數將被調用時,從網址獲得成功的JSON響應您發送$.getJson()請求。

+0

謝謝。但我的意圖是有不同的排序選項。如果沒有,我會在數據庫查詢本身完成它。 –

0

在你點擊處理程序你期待「json」作爲參數。所以它在參數範圍內尋找它。你已經將「json」定義爲一個全局變量,但是它不會在那裏找到它,因爲你正在尋找它作爲參數。

因此,您需要將「json」傳遞給處理程序,或者您需要刪除參數期望值。

+0

我已經刪除了參數期望並遵循IAbstractDownvoteFactor的建議。但依然沒有迴應。 –

+0

當說「沒有排序的反應」時,你是什麼意思?你沒有顯示任何sort()的代碼。我不希望代碼「顯示」任何東西。您是否在FireBug中觀看GET請求以查看它是否正在觸發請求?你看到這個迴應嗎?它看起來不像你已經發布的代碼中使用json變量做什麼 –

+0

是的,在FireBug中有來自GET請求的數據。我已經測試了結果函數中的排序函數,並發現它正在顯示排序結果。因爲我想要有多個排序選項,所以我將它分開,以便可以使用點擊處理程序進行處理。從錯誤控制檯出來沒有錯誤,單擊鏈接時不會對結果進行排序。 –