Ну, есть пара вещей, которые я бы изменил, и пара вещей, которые вы делаете правильно. Во-первых, ваш почтовый запрос может кодировать JSON сам по себе. Взгляните на свою линию
$.post('phpPage.php', { /*no matter*/ }, showResult, "text");
и измените его на
$.post('phpPage.php', { /*no matter*/ }, showResult, "json");
jQuery проанализирует json и превратит его в объект.
Теперь для объяснения, когда вы используете encode_json()
с php, он не создает объект 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 и добавлять его в тело в новой строке.
Теперь использовать его с автозаполнением - это то, что говорят эти плагины. Надеюсь, это вам немного поможет.