0

ケース1:何がうまくいかないのですか?

$phpObj=json_decode(file_get_contents($url),true);

上記のfile_get_contentsはjsonを返し、上記を使用してそれをphpオブジェクトに変換し、多次元配列である$ phpObj(特定の文字列を抽出するため)を解析し、$newObjなどのキー値の新しい配列を形成します。その後、json_encodeを使用してnewObjをjsonに変換します。

jQueryを使用して$newObjを解析し、それをhtmlにレンダリングします。

ケース2:私にとって何が効果的ですか?

jsonを解析する代わりに、サーバーにXMLを返すようにし、上記のようにjson_decodeの代わりに次を使用します。

$xmlDoc->load($url);

XMLを解析して$newObj(キーと値のペア)を作成し、上記と同じようにjQueryを使用して、ブラウザーでレコードセットをレンダリングします。完全に正常に動作します。

もちろん、parsiong JSONとXML以外のケース1と2の唯一の違いは、jQueryがレンダリングのコールバック関数で受け取る値です。

ケース1の場合(機能しません):

{"1002":"I am Yavar","1003":"I work for XYZ","1004":"California is in US"}

ケース2(作品)の場合:

[{"1000":"California is in US","xmlNode":{}},{"1001":"I work for XYZ","xmlNode":{}}]

ケース1で何が問題になっているのか、誰かが私を助けてくれるといいのですが、ケース2で角かっこ([])とxmlNodeが機能するために本当に必要ですか?

ここで本当に必要な場合は、私のjQuery関数です。

<script>
$(document).ready( function() {
$('#term').keyup( function() {

  $.get('search_json.php?q='+escape($('#term').val()), function(data) {
    html = '<table id="results">';
    $.each( data, function( ind, ep ) {
        html += '<tr><td class="document"><b>'+ind.key+'</b>&nbsp;';
        html += +ep.value+'</td></tr>';
    } );
    html += '</html>';
    $('#results').replaceWith( html );
  } );
} );
} );
</script>
4

1 に答える 1

1

インデックスがゼロ以外のキーを持つオブジェクトに対して$.each()を実行することはできません。メソッド2が機能する理由は、1つのオブジェクトではなく、オブジェクトの配列として返すためです。

メソッド2を使用するか、jsonオブジェクトをループして、次のように吐き出します。

$outObj = array(); // Don't forget to initialise your arrays!
foreach($phpObj as $key => $value) {
   $value['key'] = $key;
   $outObj[] = $value; 
}
json_encode($outObj);

提案したJavascriptを使用して反復可能な内部配列を作成します。ep.keyただし、代わりに参照する必要がありind.keyます。

于 2012-04-27T16:39:46.930 に答える