какой тип данных в success: функция (данные)?

#php #jquery

#php #jquery

Вопрос:

Здесь $fruit кодируется с помощью js_encode() и отправляется обратно в data в ajax. Мои вопросы: какой тип данных (строка или массив)? Заранее спасибо!

 $.ajax({
                                type:"post",
                                dataType:"json",

                                url:"phpFile.php",
                                success: function(data) {


                                }
                          });

<?php
    $fruits = array(array("1","apple"),array("2","pear"));
    echo js_encode($fruits);
?>
  

Комментарии:

1. Я думаю, вы имеете в виду использовать json_encode($fruits), если только вы не написали функцию с именем js_encode .

Ответ №1:

Вы указали тип данных ответа как json . jQuery попытается автоматически декодировать данные в формате JSON и передать полученный тип данных JavaScript в обратный вызов. Это data может быть строка, число, логическое значение, null массив или объект.

В вашем конкретном случае вы кодируете массив PHP как JSON, поэтому результатом будет массив.

Комментарии:

1. Если вы анализируете строку JSON, у вас может быть только массив или объект. Другие типы данных могут быть представлены внутри, но самый внешний тип данных может быть только array или object.

2. @Quentin: Ммм, вы правы… Клянусь, я видел, что jsonlint объявляет "somestring" действительный JSON, но теперь это не … странно. Тогда Imo JSON.stringify("foo") также должен завершиться неудачей…

3. Возможно, ошибка в jsonlint, которая теперь исправлена?

Ответ №2:

Это ничего не будет. Метод success никогда не сработает, потому что PHP выдаст ошибку with Fatal error: Call to undefined function js_encode() , которая вернет ошибку 500, поэтому jQuery запустит error функцию (если она существует), а не success функцию.

Если бы вы исправили PHP и использовали json_encode , тогда он выводил бы JSON с массивом верхнего уровня, так data что это был бы массив.

Обратите внимание, что вы также должны убедиться, что ваш скрипт не утверждает, что JSON является HTML.

 header('Content-Type: application/json');
  

Ответ №3:

data переменная будет содержать следующее: [["1","apple"],["2","pear"]]