来自php文件的自动完成源代码

时间:2011-04-23 14:59:25

标签: php jquery ajax json

我是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>

2 个答案:

答案 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对象的每个值并将其添加到新行上的正文中。

现在将它与自动完成一起使用就是那些插件文档所说的。我希望这对你有所帮助。