0

答えた

この投稿に返信してくれたすべての人に感謝します。Kevin (ループの最適なソリューション) に感謝し、並べ替え機能については Deepak に感謝します。

サイトでこのデータのページネーション ソリューションを見つけようとしていますが、それ以上の助けをいただければ幸いです。

ありがとうございました!

オリジナル・クワイス

あなたが私を助けてくれることを願っています。JSON フィードがあります (検証済みで、http://jsonlint.com/で完全に機能しています)。私は自分の側でページを設定しましたが、1 つの結果を問題なく解析できます。フィードには多くの結果があり、すべての結果を返すには jQuery が必要です。ここで示している例には 11 件の結果がありますが、他のページのいくつかには最大 300 件の結果があります。したがって、これは 2 つの部分からなる質問です。

私のスクリプトの知識は、与えられたコードを変更できることですが、それを自分で書くことはできません (ただし、私は自分自身を教える過程にあります)。

  1. すべての結果を返すにはどうすればよいですか?
  2. 結果をページ分割するにはどうすればよいですか。たとえば、1 ページあたり 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アイテムごとに 1 回反復する必要があります。Javascript では、配列には継承プロパティの長さが含まれます。length プロパティの値は、配列内に含まれる要素の数を示します。これを追加するfor loopと、配列内の要素ごとに 1 回反復するように指示されます。

ループを次のように変更します。

for (var i = 0; i < json_obj.length; i++){
   //code omitted
}
于 2013-10-16T09:27:11.683 に答える
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

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
$.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 に答える
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

「オールインワン」の答え:

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

データを並べ替える方法は次のとおりです。

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 に答える