0

已回答

感谢所有在这篇文章中回复的人。感谢 Kevin(循环的最佳解决方案)并感谢 Deepak 的排序功能。

我将尝试在网站上为这些数据找到分页解决方案,但如果有任何进一步的帮助,我将不胜感激。

再次感谢大家!

原始问题

我希望你能帮助我。我有一个 JSON 提要(我已经验证并在http://jsonlint.com/上完美运行)。我已经在我这边设置了页面,我可以解析一个结果没有问题。问题是提要中有很多结果,我需要 jQuery 来返回所有结果。我在这里展示的示例有 11 个结果,但其他一些页面最多有 300 个结果。所以这是一个两部分的问题。

我的脚本知识能够更改给定的代码,但自己编写是不可能的(虽然我正在自学)

  1. 如何返回所有结果?
  2. 我如何对结果进行分页,比如每页 15 个?

我正在使用 JAMES PADOLSEY 的Cross Domain Ajax插件来提取数据 - 这是正确的术语吗?

我正在使用的 jQuery 代码是:

jQuery.noConflict()(function($) {
$(document).ready(function($) {
    $.ajax({
        type: 'GET',
        url: "http://dealer.mustek.co.za/public-content-api.html?content=dealers&province=limpopo",
        success: function(response) {
            var headline = $(response.responseText).text()
            var json_obj = $.parseJSON(headline); //parse JSON
            console.log(json_obj);
            var output = '';
            for (var i = 0; i < json_obj.user_id; i++)
            output += "<div class='dealer'>";
            output += "<dl>";
            output += "<dt>Company Name</dt>"
            output += "<dd>" + json_obj[i].company_name + "</dd>"
            output += "<dt>Company Description</dt>"
            output += "<dd>" + json_obj[i].company_description + "</dd>";
            output += "<dt>Email Address</dt>"
            output += "<dd>" + json_obj[i].company_email + "</dd>";
            output += "<dt>Contact Number</dt>"
            output += "<dd>" + json_obj[i].contact_number + "</dd>";
            output += "<dt>Website URL</dt>"
            output += "<dd>" + json_obj[i].website_url + "</dd>";
            output += "<dt>City</dt>"
            output += "<dd>" + json_obj[i].city_suburb + "</dd>";
            output += "<dt>Physical Address</dt>"
            output += "<dd>" + json_obj[i].physical_address + "</dd>";
            output += "</dl>"
            output += "<p>"
            output += "</div>";
            $('#dealer_limpopo').html(output);
        },
    });
});
});

我将 div 拉入测试 html 页面http://thegearbox.co/thisisatest/

如您所见,提要没有问题,一切正常,只需要那条讨厌的线循环所有数据。目前,

for (var i = 0; i < json_obj.user_id; i++)

没有做这项工作。

任何帮助将不胜感激!

PS。有没有办法按字母顺序对数据进行排序,或者我只是厚颜无耻地要求这么多?:)

更新

非常感谢到目前为止发表评论的所有人。我在下面使用@Kevin 的解决方案来显示所有数据

for (var i = 0; i < json_obj.length; i++)

我正在使用@Deepak 的解决方案按字母顺序对数据进行排序:

                json_obj.sort(function compare(a,b) {
            if (a.company_name < b.company_name)
            return -1;
            if (a.company_name > b.company_name)
            return 1;
            return 0;
            });

任何人都可以帮助分页吗?

4

7 回答 7

1

应该为 [] json_obj 中的for loop每个项目迭代一次。在 Javascript 中,数组包含一个继承属性长度。length 属性的值表示数组中包含多少元素。添加它以for loop告诉它对数组中的每个元素进行一次迭代。

将循环更改为:

for (var i = 0; i < json_obj.length; i++){
   //code omitted
}
于 2013-10-16T09:27:11.683 回答
0

"All in one" answer :

var headline = $(response.responseText).text()
var json_obj = $.parseJSON(headline); //parse JSON
json_obj.sort(function (a, b) {
    if (a.company_name > b.company_name) { return 1; }
    if (a.company_name < b.company_name) { return -1; }
    return 0;
});
return jQuery.map(json_obj, function (row) {
    return [
        '<div class="dealer">',
            '<dl>',
                '<dt>Company Name</dt>',
                '<dd>', row.company_name, '</dd>',
                '<dt>Company Description</dt>',
                '<dd>', row.company_description, '</dd>',
                '<dt>Email Address</dt>',
                '<dd>', row.company_email, '</dd>',
                '<dt>Contact Number</dt>',
                '<dd>', row.contact_number, '</dd>',
                '<dt>Website URL</dt>',
                '<dd>', row.website_url, '</dd>',
                '<dt>City</dt>',
                '<dd>', row.city_suburb, '</dd>',
                '<dt>Physical Address</dt>',
                '<dd>', row.physical_address, '</dd>',
            '</dl>',
        '</div>'
    ];
}).join('');
于 2013-10-16T10:11:50.127 回答
0

您应该使用 jquery 的 for-each 循环。

如果您的 json 响应对象是一个数组。

$.each( json_obj, function(index, value) {
    // process the value 
    // append value.company_name, value.company_email etc. to output.
});

并且,根据公司名称对数据进行排序。

json_obj.sort(function compare(a,b) {
     if (a.company_name < b.company_name)
         return -1;
     if (a.company_name > b.company_name)
        return 1;

        return 0;
});
于 2013-10-16T09:31:10.510 回答
0

你的“json_obj”是一个数组。

改变

for (var i = 0; i < json_obj.user_id; i++)

for (var i = 0; i < json_obj.length; i++) {
于 2013-10-16T09:46:49.947 回答
0

因为在你的情况下json_obj似乎是一个列表,所以,

json_obj.user_id 未定义。如果你有一个列表,试试这个。

for (var i = 0; i < json_obj[0].user_id; i++)

否则使用

$.each(json_obj,function(data,index){
//your html code here
})

希望能帮助到你...

于 2013-10-16T09:33:27.233 回答
0

这是一种对数据进行排序的方法:

json_obj.sort(function (a, b) {
    if (a.company_name > b.company_name) { return 1; }
    if (a.company_name < b.company_name) { return -1; }
    return 0;
});

然后您可以将for循环替换为jQuery.map()以获取输出:

var output = jQuery.map(json_obj, function (row) {
    // build your HTML here
    return '<div>' + row.company_name + '</div>';
}); 

最后 :

$('#dealer_limpopo').html(output.join('')); // don't forget to join :)
于 2013-10-16T09:34:19.283 回答
0
$.ajax({
    type: "GET", timeout: 60000, cache: false, dataType: "jsonp", url: strURL + "&callback=?",
    success: function (response) {
        objAttributes = response.Attributes;

        var List = "";
        if (objAttributes != null) {
            var iLoop = 0;
            var xLoop = 0;

            for (iLoop = 0; iLoop < objAttributes.Product.length; iLoop++) {             
                if (List.length > 0) List = List + ":";
                List = List + objAttributes.Product[iLoop].ID;
                List = List + "_" + objAttributes.Product[iLoop].ITEM;               
            }
        }


    },
    error: function (XMLHttpRequest, textStatus, errorThrown) {

    }
});

此代码可能会对您有所帮助。

于 2013-10-16T09:38:53.617 回答