2013-08-16 3 views
1

У меня возникли проблемы с ajax/jquery в codeigniter.json parsing proble в codeigniter

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

Обработчик нажатия кнопки:

function postMessage(e) { 
    var postUrl = 'http://localhost/myProject/index.php/main/post_message'; 
    $.ajax({ 
     type: "POST", 
     url: postUrl, 
     success: successfulPost, 
     dataType: "text" 
    });  
} 

Ajax обратного вызова:

function successfulPost(data) { 
    data = JSON.parse(data); 
    document.write(data[0].hello); 
} 

сервисной функции внутри Главный контроллер:

function post_message() { 
    echo "[{\"hello\":\"world\"}]"; 
    return; 
} 

Проблема в том, тха JSON.parse() похоже, не выполняет свою работу.

Эти функции довольно просты, поэтому я начинаю думать, может быть, проблема с codeigniter?

EDIT:

что любопытно, что если я ставлю точно такую ​​же строку JSON в JSON.parse() он получает разобран, то proble когда функция обслуживания передает.

EDIT:

подсчета числа символов в строке JSon она должна быть 13 , но я получаю 17 ...

Edit:

Я теперь признают, что несмотря на то, вторя выполняется правильно есть странные символы, ведущие тело ответа HTTP ... что-то вроде новых строк \ 0 или вкладок кто-нибудь подскажет почему?

+0

Тип данных в вызове Ajax является текст, и это может быть возвращение вам текст, изменить и посмотреть, если это решит вашу problem.Json синтаксический анализ не будет работать правильно, если вы не получите данные json, и, поскольку вы написали текст в виде данных, он отправит вам текстовый вывод. – WordsWorth

+0

Какой у вас браузер?, Вы проверили консольный журнал (f12)?, JSON.parse поддерживается только в современных браузерах, используйте $ .parseJSON() вместо – amd

+0

нет, изначально это был «json», а successPost не получал даже вызванный, потому что ошибка синтаксического анализа была сгенерирована раньше, я помещаю «текст» таким образом, что успешно вызывается функция receivelPost, и я могу сделать некоторую отладку с использованием предупреждения. – GionJh

ответ

0

Попробуйте установить заголовок в PHP:

$data = array("hello" => "world"); 
header('Content-Type: application/json'); 
echo json_encode($data); 

Returning JSON from a PHP Script

+0

спасибо за вашу помощь, но это не работает, поскольку я сказал, что проблема в том, что в ведущие символы ответа тела HTTP там табуляции и \ 0, я не знаю, почему они там, но я думаю, что это может быть ошибкой codeIgniter или, по крайней мере, той версии, которую я использую, любая помощь в этом смысл оценивается. – GionJh