2012-05-15 5 views
0

У меня есть следующий PHP-код, который возвращает объект JSON через Ajax для клиента.С помощью jQuery, почему успешный обратный вызов не выполняется, когда JSON возвращается через Ajax?

function loadAll(){ 
    $knowledgeHandler = new KnowledgeLevelHandler(); 
    $json = $knowledgeHandler->loadAll();   
    header('Content-type: application/json'); 
    print $json; 
} 

У меня есть тестовая функция, назначенная для успешного обращения к jQuery Ajax.

successCallback = function(data){ 
    alert("A"); 
} 

options = {  
    "data": data, 
    "async": false, 
    "type": "post", 
    "success":successCallback   
} 
$.ajax(url, options); 

Когда я удалить header('Content-type: text/json'); из PHP кода, обратный вызов выполняется, но когда он выполняется, обратный вызов не выполняется. Что не так?

+0

Есть ли конкретная причина вы используете синхронный запрос? Может быть, попробуйте асинхронно? –

+0

Обычно я не устанавливаю тип заголовка, я просто выхожу из строки, например. echo json_encode (массив ("success" => true)); – gunnx

ответ

2

Я считаю, что вам необходимо указать возвращаемый тип данных JSON в вызове JQuery AJAX.

http://api.jquery.com/jQuery.ajax/

Тип JSON разбирает извлеченный файл данных в качестве объекта JavaScript и возвращает объект, построенный в качестве результирующих данных.

successCallback = function(data){ 
    alert("A"); 
} 

options = {  
    data: data, 
    async: false, 
    type: "POST", 
    success: "successCallback", 
    dataType: "json" 
} 

$.ajax(url, options); 

Ваша функция successCallback теперь будет содержать объект данных, с помощью которого вы можете получить доступ к переменным; data.var_1, data.some_other_var и т.д.

Нил

1

Попробуйте сказать jQuery, что вы ожидаете от json.

options = {  
    "data": data, 
    "async": false, 
    "type": "post", 
    "success":successCallback, 
    "dataType": "json"  
} 

можно также добавить функцию обратного вызова ошибки с XHR, сообще, кодом, как и аргументы и выходом тех, чтобы получить лучшее представление о том, что это неправильно.

1

Попробуйте это:

options = {  
    "data": data, 
    "async": false, 
    "type": "post", 
    "success":successCallback,   
    "dataType: "json" 
} 
$.ajax(url, options); 
Смежные вопросы