Прототип считает, что JSON из PHP является строкой - PullRequest
0 голосов
/ 21 апреля 2011

У меня есть следующий код в JS:

    new Ajax.Request('http://www.some_random_url.com',
      {
        parameters: { start : this.start, stop : this.stop },
        method: 'post',
        onSuccess: function(transport){

          var response = transport.responseText || "no response text";
          alert("Success! \n\n" + response.posts);
          $(response.posts).each( function(item) {
            alert(item.title);
            }
        },
        onFailure: function(){ alert('Something went wrong...') }
      });

, а затем у меня есть следующий код в PHP.Функция принимает массив в качестве аргумента и предназначена для вывода JSON.

function view_api($array) {

    header('Content-type: application/json');
    echo json_encode(array('posts'=>$array));

}

Тем не менее, prototypejs воспринимает его как строку.Когда response предупрежден, все в порядке.Но каждый цикл в JS говорит, что response.posts не определено.

Знаешь почему?

Ответы [ 4 ]

2 голосов
/ 21 апреля 2011

используйте evalJSON (), чтобы типизировать ответ в объекте JSON как

var response = transport.responseText.evalJSON() || "no response text";
2 голосов
/ 21 апреля 2011

Если он возвращает JSON в виде строки, вам следует сначала проанализировать его.

var data = JSON.parse(payload);
1 голос
/ 21 апреля 2011

установить evalJSON: 'force' в параметрах запроса ajax прототипа.затем используйте var response = transport.responseJSON

0 голосов
/ 21 апреля 2011

Отличный трюк с prototype.js в том, что вы можете передать следующие заголовки, и он автоматически преобразуется в json.

header('X-JSON: (' . json_encode($data) . ')');
header('Content-type: application/x-json');
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...