2013-05-03 3 views
0

Я только начинаю изучать JSON, где учебник с другого сайта использует этот код (который я уже измененный, чтобы упростить это):

$(document).ready(function(){ 
    $('#getdata-button').click(function(){ 
     $.ajax({ 
      type: "GET", 
      url: "json-data.php", 
      dataType: "json", 
      success: function(){ 
       alert('a'); 
       $('#showdata').html(
        "<p>item1="+data.item1+ 
        " item2="+data.item2+ 
        " item3="+data.item3+"</p>" 
       ); 
      } 
     }); 
    }); 
}); 

И это код JSON-data.php

<?php 
    $item1 = "candy"; 
    $item2 = "chocolate"; 
    $item3 = "ice cream"; 

    //return in JSON format 
    echo "{"; 
    echo "item1: ", json_encode($item1), "\n"; 
    echo "item2: ", json_encode($item2), "\n"; 
    echo "item3: ", json_encode($item3), "\n"; 
    echo "}"; 
?> 

проблема заключается в том, что функция предупреждения (для отладки) не отвечает после того, как я нажал на кнопку (с идентификатором «GetData кнопки»). Firebug говорит, что запрос успешно, и я вижу данные оттуда. Ошибка не обнаружена. Просто функция обратного вызова не выполняется, но почему?

+2

Ваш JSON недействителен. Ключи и строковые значения должны быть заключены в двойные кавычки, а 'json_encode()' не предназначен для использования INSIDE json string, он предназначен для вывода полной строки JSON. –

+4

Gah! Не делай этого! Вы должны создать массив в PHP, а затем просто сделать 'echo json_encode ($ array)' – Bojangles

+0

Я нахожу http://jsonlint.com очень полезным. Вы также должны воспользоваться обратным вызовом «ошибка» ajax. Также http://www.json.org хорош для теории и синтаксиса. – dgig

ответ

2

Вы должны правильно вывести свой JSON. Замените свой PHP ниже

$items = array(
    'item1' => $item1, 
    'item2' => $item2, 
    'item3' => $item3 
); 
header('Content-type: application/json'); 
echo json_encode($items); 
+3

Это должно быть 'application/json'. http://stackoverflow.com/a/477819 –

+0

D'Oh! конечно, должно. Спасибо (и отредактирован для будущего) – fullybaked

+0

@fullybaked Спасибо, это работает отлично. Но действительно ли заголовок обязателен? – Arman

Смежные вопросы