2009-03-25 3 views
105

У меня есть PHP-скрипт, который вызывается через jQuery AJAX. Я хочу, чтобы PHP-скрипт возвращал данные в формате JSON в javascript. Вот псевдо-код в PHP скрипт:Возвращение JSON от PHP к JavaScript?

$json = "{"; 
foreach($result as $addr) 
{ 
    foreach($addr as $line) 
    { 
     $json .= $line . "\n"; 
    } 
    $json .= "\n\n"; 
} 
$json .= "}"; 

В принципе, мне нужны результаты двух для петли должны быть вставлены в $ JSON.

ответ

170

Php имеет встроенную функцию JSON Serializing.

json_encode 

json_encode

Пожалуйста использование, что если вы можете и не страдают изобретено не здесь синдром.

+2

Отлично, спасибо. Я действительно посмотрел это, прежде чем публиковать на нем, но я не думал, что он будет доступен на моем хостинге. – AquinasTub

79

В документации PHP содержится JSON section. Вам понадобится PHP 5.2.0.

Начиная с PHP 5.2.0, расширение JSON вставляется и скомпилировано в PHP по умолчанию.

Если вы этого не сделаете, то вы можете установить PECL library.

<?php 
    $arr = array ('a'=>1,'b'=>2,'c'=>3,'d'=>4,'e'=>5); 

    echo json_encode($arr); // {"a":1,"b":2,"c":3,"d":4,"e":5} 
?> 
+1

Хороший пример. Спасибо. –

13

Обычно вы были бы заинтересованы в и имеющие определенную структуру для данных в приемном конце:

json_encode($result) 

Это сохранит ключи массива, а также.

Помните, что json_encode работает только с данными, закодированными utf8.

0

Вы можете использовать Simple JSON for PHP. Он отправляет заголовки, чтобы помочь вам подделать JSON.

Это выглядит следующим образом:

<?php 
// Include the json class 
include('includes/json.php'); 

// Then create the PHP-Json Object to suits your needs 

// Set a variable ; var name = {} 
$Json = new json('var', 'name'); 
// Fire a callback ; callback({}); 
$Json = new json('callback', 'name'); 
// Just send a raw JSON ; {} 
$Json = new json(); 

// Build data 
$object = new stdClass(); 
$object->test = 'OK'; 
$arraytest = array('1','2','3'); 
$jsonOnly = '{"Hello" : "darling"}'; 

// Add some content 
$Json->add('width', '565px'); 
$Json->add('You are logged IN'); 
$Json->add('An_Object', $object); 
$Json->add("An_Array",$arraytest); 
$Json->add("A_Json",$jsonOnly); 

// Finally, send the JSON. 

$Json->send(); 
?> 
+1

$ object = new stdClass(); помог мне! спасибо;) – ivahidmontazer

+0

Предупреждение: простой JSON для PHP лицензирован GPLv2, поэтому ваш собственный код должен быть открытым исходным кодом, чтобы его использовать. –

+1

@JamieBirch Я могу это решить;) –

87

Вот несколько вещей, которые отсутствуют в предыдущих ответах:

  1. Установить заголовок в вашем PHP:

    header('Content-type: application/json'); 
    echo json_encode($array); 
    
  2. json_encode() может return a JavaScript массив inste объявление JavaScript объект, см.:
    Returning JSON from a PHP Script
    Это может быть важно знать в некоторых случаях, когда массивы и объекты не совпадают.

+0

Важно отметить, что данные ** echo ** ed вместо ** return ** ed! Это немного меня укусило, когда я впервые понял концепцию. Потому что в общем программировании почти все обычно возвращается не «напечатано». –

+0

Эй @ Джуха, имейте в виду, что 'json_encode()' (как и все функции) всегда возвращает что-то (в том числе 'NULL'); вы можете распечатывать данные, обрабатывать их, а затем печатать, указывая на переменную для последующего использования, сохранять ее в файл и т. д. ... Подробнее о 'return' в [PHP: Возвращаемые значения] : //php.net/manual/en/functions.returning-values.php). Также вы можете (и должны!) Проверить, что каждая функция, которую вы не знаете, возвращается, см. Наш пример [json_encode()] (http://php.net/manual/en/function.json-encode.php) он указывает _Returns закодированную строку JSON при успешном завершении или FALSE при сбое. – aesede

+0

Тогда мне было интересно, почему 'return json_encode ($ jsonArray);' не работал (у AngularJS http.get ничего не получилось), пока я позже заметил это :) –