2012-04-02 2 views
5

Я пытаюсь отправить несколько переменных из php-файла в ajax, используя json в массиве. Код в файле php отлично работает и делает все с моей базой данных, как должно. Но как только я добавляю dataType: «json» в ajax, в php-файле больше ничего не происходит. Я немного поработал в Google, и некоторые люди упомянули, что это может быть проблема с браузером, но пока это не работает ни в firefox, chrome, ни в IE. Я использую последнюю версию jQuery.dataType: "json" не работает

Это то, что происходит внутри PHP:

<?php 
//Create variables and update database 

echo json_encode(array("id" => "$realid", "un" => "$username", "date" => "$date")); 
?> 

И это код Ajax:

.ajax(
{ 
    url: 'UpdateComments.php', 
    type: 'POST', 
    dataType: "json", 
    data: 
    { 
     type: "add", 
     comment: $("#comment").val(), 
     id: videoID 
    }, 
    success: function (data) 
    { 
     //Get the data variables from json and display them on page 
    } 
}); 

Я невежественный на это, любой совет будет весьма признателен!

+0

Проверьте АЯКС ответ в Firebug/чистой панели и посмотреть, что будет с вашего сервера. –

+0

HTTP-заголовок contentType может помочь – Bergi

+1

Я подозреваю, что возвращаемое не строго JSON - проверьте пробелы до или после вашего PHP или что-то еще в файле, который не должен быть там (подсказка: используйте «die» сразу после json_encode). Если вы не укажете тип данных в JQuery, успех = получение ответа. Когда вы это сделаете, успех = получение ответа VALID .... Также проверьте свою версию PHP, я, похоже, помню, что json_encode прослушивался в более ранней версии. – Codecraft

ответ

6

Общая проблема заключается в том, что браузер печатает «что-то еще» перед JSON, является ли это некоторая читабельность или нечитаемым (невидимый) символ. Попробуйте сделать что-то вроде этого:

<?php 
//at the very beginning start output buffereing 
ob_start(); 

// do your logic here 

// right before outputting the JSON, clear the buffer. 
ob_end_clean(); 

// now print 
echo json_encode(array("id" => $realid, "un" => $username, "date" => $date)); 
?> 

Теперь все данные дополнения (до JSON) будут отброшены, и вы должны иметь это работает ...

+0

Спасибо, это сделал трюк! – Glenn

0

Если вы задаете тип данных в jQuery, это фактически устанавливает атрибут заголовка Content-Type. Возможно, в вашем скрипте PHP вам нужно объявить этот тип MIME как принятый. Вы заметили, что код даже входит в скрипт PHP при выполнении запроса? Я сомневаюсь, что это проблема с браузером, если она не работает в Firefox, Chrome или IE.

Чтобы получить более точную точку зрения на запрос AJAX, подпишитесь на ajaxBeforeSend (не уверены, правильно ли зарегистрировано имя события jQ docs) и зарегистрируйте объект xhr.

0

Я бы не использовал dataType, если это вызывает у вас проблемы, также я лично не использовал объект в качестве значения данных, прежде чем, возможно, что-то с этим связано?

Во всяком случае, я изменил основную рутину ajax, надеюсь, это поможет.

$.ajax(
{ 
    url: 'UpdateComments.php', 
    type: 'POST', 
    data: 
    { 
     type: "add", 
     comment: $("#comment").val(), 
     id: videoID 
    }, 
    success: function (response) 
    { 
     //Get the data variables from json and display them on page 
     var data = $.parseJSON(response); 
     alert(data.id); 
    } 
}); 
1

Я считаю, что если вы используете DATATYPE вы должны использовать CONTENTTYPE, «Официальный тип интернет-СМИ для JSON является применение/JSON».

.ajax(
{ 
url: 'UpdateComments.php', 
type: 'POST', 
contentType: "application/json",//note the contentType defintion 
dataType: "json", 
data: 
{ 
    type: "add", 
    comment: $("#comment").val(), 
    id: videoID 
}, 
success: function (data) 
{ 
    //Get the data variables from json and display them on page 
} 
}); 
0

Попробуйте определения обработчика ошибок в части вызова $ .ajax

$.ajax({ 
    ..., 
    error: function(xml, error) { 
    console.log(error); 
    } 
}); 

Затем проверьте отладки консоль для любых ошибок, которые могут помочь диагностировать проблему.