Это прослушивало меня в течение последних нескольких часов, и я пробовал различные поиски, но не нашел точно эту проблему с ответом. Может быть, попросить и показать какой-то код поможет мне понять это.PHP JSON Encoded Object вызывает ошибку Ajax
Я использую ajax для создания сообщения на PHP, которое я хочу просто дать уведомление, чтобы я мог обновить div на странице. В этом случае мне просто нужен PHP, чтобы сказать что-то вроде «Cfail», которое javascript будет использовать для обновления содержимого страницы.
Первоначально, я собирался попробовать только текстовые ответы. Итак, мой PHP, например, будет выглядеть так:
<?php
session_start(); //Because have an encoded captcha answer.
if(empty($_POST['captinput']) || md5($_POST['captinput']) !== $_SESSION['captchacode']){
echo 'Cfail';
}
?>
Javascript будет:
$(document).ready(function(){
$('form#Contact').submit(function(e){
e.preventDefault();
var $form = $(this);
var formdata = $form.serialize();
var myurl = $form.attr('action');
$('#loader').stop(true).fadeTo(300,1);
$.ajax({
url: myurl,
dataType: 'text',
cache: 'false',
type: 'POST',
data: formdata,
success: function(returned){
$('#loader').stop(true).fadeTo(300,0);
if(returned=='Cfail'){
alert("I read it right!");
}
}
});
});
});
Он будет проходить через сценарий просто отлично, но результат не был бы то, что я просил , Предупреждение показало коррективный текст, однако исследования показали, что проблема с этим была, по-видимому, добавлением белого пространства. Общим ответом было кодирование ответа JSON. Итак, я попробовал это.
Обновлено PHP:
<?php
sesson_start(); // Captcha Stored in Session
header('Content-type: application/json');
if(empty($_POST['captinput']) || md5($_POST['captinput']) !== $_SESSION['captchacode']){
$result = array('result' => 'Cfail');
echo json_encode($result);
exit;
}
?>
Обновлено Javascript:
$(document).ready(function(){
$('form#Contact').submit(function(e){
e.preventDefault();
var $form = $(this);
var formdata = $form.serialize();
var myurl = $form.attr('action');
$('#loader').stop(true).fadeTo(300,1);
$.ajax({
url: myurl,
dataType: 'json',
cache: 'false',
type: 'POST',
data: formdata,
success: function(returned){
$('#loader').stop(true).fadeTo(300,0);
if(returned.result=='Cfail'){
alert("I read it right!");
}
}
});
});
});
который теперь больше не работает успешно. Предупреждение не появляется, и объект загрузчика остается видимым (что указывает на то, что успех никогда не проходит). Я попытался помещать блок ошибок в ajax, и он действительно уволил это. Тем не менее, я понятия не имел, как разобрать или даже выяснить, что такое ошибка. Самое большее, что я пытался получить, это то, что выводил PHP, что было {"result": "Cfail"} .... Что я буду EXPECT PHP, чтобы дать мне.
Я могу обойти это, я сделал подобную настройку, просто повторяя число, а не слова, и он работал очень хорошо, насколько я знал. Я просто хотел бы выяснить, что я делаю неправильно здесь.
EDIT:
мне удалось выяснить, что проблема была в моем случае. У меня было требование («config.php»); между началом сеанса и оператором json_encode if. По какой-то причине добавление внешнего файла, который был только мне, установил пару переменных для дальнейшего кода, некоторый скрытый символ был добавлен до первого {объекта JSON.
Не знаю, почему. Как я уже сказал, это всего лишь $ var = 'stuff'; ситуация в требовании, но, видимо, это вызвало проблемы. :/
что ответ вы получили в опции сети вашего отладчика? –
Глядя на консоль javascript в Chrome, единственные прямые ответы, которые я вижу, - это ответ xhr от php, дающий то, что я ожидаю: {"result": "Cfail"} ... Если мне не хватает вкладки, чтобы посмотреть в? – ABarr
просто посмотрите на выходной отклик, когда вы нажимаете на сетевой URL-адрес, который отображается, когда вы делаете вызов ajax. –