Помощь в передаче многомерного массива JSON в автозаполнение JQuery через AJAX - PullRequest
1 голос
/ 27 января 2010

Я пытаюсь реализовать живой поиск на моем сайте фотографий, используя jQuery и плагин автозаполнения. Все работает, когда я указываю данные локально:

var data = [ {text:'Link A', url:'/page1'}, {text:'Link B', url: '/page2'} ];

Однако, когда я перемещаю это в PHP, jQuery не может правильно проанализировать результаты. Я действительно не уверен, что здесь происходит. Мой текущий код ниже:

<script>
$(document).ready(function(){
var data = '/livesearch'; 
$("#aut_field").autocomplete(data, {
  formatItem: function(item) {
    return item.text;
  }
}).result(function(event, item) {
  location.href = item.url;
});
                });
</script>

А мой PHP-скрипт печатает многомерный массив в следующем формате:

{"1":{"text":"Google Website","url":"http:\/\/www.google.com"},
 "2":{"text":"Yahoo Website","url":"http:\/\/yahoo.com"},}

Однако, когда я делаю оповещение (item.text), переменная говорит неопределенное.

Если я выдаю предупреждение (элемент), я вижу всю строку, выведенную PHP.

Я пытался поиграть с eval (), но я не уверен, куда его поместить или как заставить JS реально интерпретировать данные. Спасибо за вашу помощь. Пример кода, специфичного для моей реализации, приветствуется.

Ответы [ 3 ]

1 голос
/ 27 января 2010

попробуйте в вашем php этот шаблон:

[
   {"text":"Google Website","url":"http:\/\/www.google.com"},
   {"text":"Yahoo Website","url":"http:\/\/yahoo.com"}
]
1 голос
/ 27 января 2010

Проблема с кодом php.

Ваша задача - имитировать суть рабочего массива javascript. Смотрите php's json_encode ()

0 голосов
/ 16 апреля 2013

И ваш PHP-скрипт возвращает многомерный массив / объект микс. Если вы настаиваете (вы взрываете свою переменную несколькими "text:" amd "url;"), это должно быть:

[[{"text":"Google Website","url":"http:\/\/www.google.com"}],[{"text":"Yahoo Website","url":"http:\/\/yahoo.com"}]]

Лучше:

var x=[["Google Website","http:\/\/www.google.com"],["Yahoo Website","http:\/\/yahoo.com"]];

Если вы хотите перейти на сайт Yahoo: var url = x [1] [1];

Или:

var x={"Google_Website":"http:\/\/www.google.com","Yahoo_Website":"http:\/\/yahoo.com"};

Если вы хотите перейти на Google_Website: var url = x ["Google_Website"];

Мой совет: посетите введите описание ссылки здесь

...