Я пытаюсь отправить несколько переменных из php-файла в ajax, используя json в массиве. Код в файле php отлично работает и делает все с моей базой данных, как должно. Но как только я добавляю dataType: «json» в ajax, в php-файле больше ничего не происходит. Я немного поработал в Google, и некоторые люди упомянули, что это может быть проблема с браузером, но пока это не работает ни в firefox, chrome, ни в IE. Я использую последнюю версию jQuery.
Это то, что происходит внутри 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 } });
Я не согласен с этим, любой совет будет очень признателен!
Общей проблемой является то, что браузер печатает «что-то еще» перед 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) будут отброшены, и вы должны работать с ним …
Я считаю, что если вы используете 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 } });
Если вы устанавливаете dataType в jQuery, это фактически устанавливает атрибут заголовка Content-Type. Возможно, в вашем скрипте PHP вам нужно объявить этот тип MIME как принятый. Вы заметили, что код даже входит в скрипт PHP при выполнении запроса? Я сомневаюсь, что это проблема с браузером, если она не работает в Firefox, Chrome или IE.
Чтобы получить лучшую перспективу в запросе AJAX, подпишитесь на ajaxBeforeSend (не уверен, что имя события правильно проверяет jQ docs) и регистрирует объект xhr.
Я бы не использовал 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); } });
Попробуйте определить обработчик ошибок как часть вызова $ .ajax
$.ajax({ ..., error: function(xml, error) { console.log(error); } });
Затем проверьте консоль отладки на наличие ошибок, которые могут помочь вам диагностировать проблему.