-1

谢谢阅读。我有一个难题,我似乎可以舔。我创建了一个基于 JSON 对象创建表行的 jQuery 插件。在这个插件中,我希望有一个具有 AJAX 调用的分页,这会产生一个具有相同变量名和不同键/值对的新 JSON 对象(我想覆盖它)。成功后,我可以提醒数据,但无法访问我正在提醒的数据中的变量。

var grid = { 
    "name": "test", 
    "columns":
    [
        {"name":"col1"},
        {"name":"col2"}
    ], 
    "rows":
    [
         {"name":"col1", "value":"text1"},
         {"name":"col2", "value":"text2"}
    ] 
}
$("#myDiv").makeTable(); <-- plugin that creates table based off this JSON
// if I alert grid.columns[0].name I get col1 no problem.

然后我做一些jQuery的东西来循环并创建一个表,没问题......

然后我在我的 makeTable() 插件中有这段代码:

$.ajax({
url: 'get_json-pages.php',
type: "GET",
data: form_data, <-- my string
dataType:"script", <-- set it to script because the output is just the javascript
success: function(data) {
            alert(data); <-- alerts perfectly, looks like the same JSON above but 
            with different key/value pairs
            the alert looks like this:
            var grid = { 
                 "name": "test", 
                 "columns":
                 [
                     {"name":"col3"},
                     {"name":"col4"}
                 ], 
                 "rows":
                 [
                     {"name":"col3", "value":"text3"},
                     {"name":"col4", "value":"text4"}
                 ]  
             }

           now when I do this:
           alert(grid.columns[0].name);
           it is a blank alert?
}
});

如何使用 AJAX JSON 覆盖 JSON 对象并重新加载我的插件以显示新的数据集?

提前致谢!

4

1 回答 1

0

您不应该让插件访问用户未传入的任何外部内容。如果您希望您的“插件”接受一个对象,那么您应该传递对插件的引用。

$("#myDiv").makeTable({data:grid});

对于分页,您可以采用两种方法之一。简单的答案是在每次分页调用时重新运行您的插件。

$.ajax({
success: function(data) {    
    var grid //construct new object from data 
    $("#myDiv").makeTable({data:grid});
}
});

或者您可以让您的插件接受“数据源”。根据您对 ajax 源的含义,这可能是微不足道的(一次获取所有数据),也可能是棘手的(更改您的请求以一次仅获取每个“页面”数据)。

于 2012-04-26T22:10:22.057 回答