2011-09-17 58 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请求的数据。我已经测试了结果函数中的排序函数,并发现它正在显示排序结果。因为我想要有多个排序选项,所以我将它分开,以便可以使用点击处理程序进行处理。从错误控制台出来没有错误,单击链接时不会对结果进行排序。 –