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,它在浏览器上呈现记录集。工作得很好。

现在除了解析 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 中出了什么问题,并且方括号 ([]) 和 xmlNode 的内容是否真的需要在案例 2 中使其工作,那就太好了?

如果真的需要这里是我的 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() 。方法二起作用的原因是因为它将它作为一个对象数组返回,而不是一个对象。

使用方法二,或者遍历你的 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 回答