0

私はjQueryに精通しておらず、検索すると、探していたものとは非常に異なる答えが得られました。

私はajaxを使用して、データベースからロードするPHPスクリプトからデータをロードしています。すでに表示されている古いデータではなく、新しいデータをロードしたい。これを行うために、データを取得しているテーブルから最も高いインデックス値を使用するというアイデアを思いつきました。これは非常に簡単です。PHPでそれを行うことは問題ありませんが、ループを実行することは難しい部分です。

私のPHPスクリプトは、受信ページに貼り付けられたHTMLを出力します。そのページが自分のページから変数を受け取る必要があるので、次のリクエストで重複を防ぐために最高のインデックス値を送信できます。ここに問題があります。

jQueryAJAXはデータ型「HTML」を受け取ります。スクリプトを更新できるように、HTMLとともに変数を渡すにはどうすればよいですか。

プログラムの仕組みの概要:

-Page.php sends an ajax(GET) request to script.php with a few variables
-Script.php receives the request and processes the variables
-Script.php finishes processing and outputs HTML
-(I want script.php to send variables to page.php that can be identified separately from the HTML)
-Page.php receives HTML and appends it
-(I want those variables to be added to the Jquery variables so they can be sent on next request)

これを行う方法が問題です。私はjQueryにあまり詳しくないので、正常に実行できるかどうかわかりません。

4

1 に答える 1

1

アイテムのマークアップが複雑でない場合、通常はデータをjsonとして取得し、jsでマークアップを作成します。

たとえば、これが返されるjsonデータであるとしましょう。

{
   "offset": 0,
   "limit": 5,
   "results": [
      { "id": 1, "name": "something"},
      { "id": 2, "name": "something2"},
      { "id": 3, "name": "something3"},
      { "id": 4, "name": "something4"},
      { "id": 5, "name": "something5"}
   ]
}

この応答が対応するデータのSQLに1対1でoffset使用できます。limitしたがって、jqueryは次のようになります。

function getResults(limit, offset) {
    $.getJSON('getitems.php', {'limit': 5, 'offset': 0}, function(data){
       var tpl = '<div id="result-_ID_">_NAME_</div>',
           html = '';  
       if(data.results.length > 0) {
         $.each(data.results, function(i, obj){
             html += tpl.replace('_ID_', obj.id).replace('_NAME_', obj.name);
         });

         $(elementToAppendTo).append(html);

         // there could be more left so lets do it again, with the offset incremented
         // to get the next set ie. offset = 0+5 = 5
         getResults(data.limit, data.offset+data.limit);
       }
    });
}

もちろん、この例では自分自身を呼び出し続けます。次のアイテムセットをいつ呼び出すかをユーザーアクションで決定する必要があると思いますが、この例は一般的な考え方を示しています。

于 2013-03-02T03:54:56.013 に答える