案例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> ';
html += +ep.value+'</td></tr>';
} );
html += '</html>';
$('#results').replaceWith( html );
} );
} );
} );
</script>
您不能对具有非零索引键的对象执行 $.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
。