автозаполнение источника из файла php - PullRequest
1 голос
/ 23 апреля 2011

Я довольно новичок в JSON, только начал его прошлой ночью, я очень близок к сроку проекта, я использовал xml и попытался теперь переключиться на json. Я начал с самого простого представления объекта json, позвольте мне перейти к коду:

PHP код:

<?php
//phpPage.php
$json = array();
$json[]='Jquery';
$json[]='AJAX';
$json[]='JSON';
//for example

echo json_encode($json);
?>

JS код:

$(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 ]

1 голос
/ 23 апреля 2011

Ну, есть пара вещей, которые я бы изменил, и пара вещей, которые вы делаете правильно. Во-первых, ваш почтовый запрос может кодировать 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 и добавлять его в тело в новой строке.

Теперь использовать его с автозаполнением - это то, что говорят эти плагины. Надеюсь, это вам немного поможет.

1 голос
/ 23 апреля 2011

используйте функцию jquery getJSON () (если вы можете получить).

ИЛИ

$.post('phpPage.php', { /*no matter*/ }, showResult, "json"); 

function showResult(data){
  $("input#autocomplete").autocomplete({
    source: data;
  });
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...