我是JSON的新手,刚刚在昨晚启动它,我非常接近项目的截止日期,我使用了xml,现在尝试切换到json。 我从json对象的最简单表示开始,让我去代码:
PHP代码:
<?php
//phpPage.php
$json = array();
$json[]='Jquery';
$json[]='AJAX';
$json[]='JSON';
//for example
echo json_encode($json);
?>
js code:
$(document).ready(function(){
$.post('phpPage.php', { /*no matter*/ }, showResult, "text");
});
function showResult(res){
var obj = JSON.parse(res);
$("input#autocomplete").autocomplete({
source: function() {
var rows = new Array();
for(var i=0; i<3; i++){//Assume that I know array size, skip it
//what to do here?
}
return rows;
}
});
}
我不知道如何将发送的对象转换为可以在自动完成的“源”中使用的数组。 谢谢你的时间, 此致!
解决方案:
<script type="text/javascript">
$(document).ready(function(){
$.post('phpPage.php', { /**/ }, showResult, "text");
});
function showResult(res){
var obj = JSON.parse(res);
$("input#autocomplete").autocomplete({
source: obj
});
}
</script>
答案 0 :(得分:1)
使用jquery的getJSON()函数(如果可以获取)。
OR
$.post('phpPage.php', { /*no matter*/ }, showResult, "json");
function showResult(data){
$("input#autocomplete").autocomplete({
source: data;
});
}
答案 1 :(得分:1)
有一些事情我会改变,有些事情你做得对。首先你的帖子请求可以通过它自己对json进行编码。看看你的专栏
$.post('phpPage.php', { /*no matter*/ }, showResult, "text");
并将其更改为
$.post('phpPage.php', { /*no matter*/ }, showResult, "json");
jQuery将解析json并将其转换为对象。
现在要解释一下,当你使用php encode_json()
时,它不会创建一个json对象,所有php都会在数组中格式化,就像JS的对象一样,然后变成json。
您正在使用JSON.parse
执行的操作是使用php返回的字符串,该字符串可能看起来像这样
{"1":"jquery", "2":"AJAX","3":"JSON"}
使用您的示例,并将其转换为JS中的对象。
现在是重要的一部分。 JS中的对象可以视为关联数组,这意味着它们是键是索引的数组。因此,操纵对象或遍历对象可以非常容易。
所以你有函数showResult(res)
如果你想遍历json对象并将结果打印到屏幕上它很容易。首先,我想将你的for循环更改为for...in
,然后我们只使用你的json对象就像一个数组
function showResult(res){
var obj = JSON.parse(res);
$("input#autocomplete").autocomplete({
source: function() {
var rows = new Array();
for (x in obj){//Assume that I know array size, skip it
$('body').append(obj[x]+'<br>');
}
return rows;
}
});
}
我在代码中唯一改变的是
for (x in obj){//Assume that I know array size, skip it
$('body').append(obj[x]+'<br>');
}
这将遍历数组并插入正确的键,其中x是使用json对象的每个值并将其添加到新行上的正文中。
现在将它与自动完成一起使用就是那些插件文档所说的。我希望这对你有所帮助。