#php #jquery #ajax
#php #jquery #ajax
Вопрос:
У меня есть этот код jQuery:
<script type="text/javascript" >
$(function()
{
$('#add_comment').bind('submit',function()
//$("input[type=submit]").click(function()
{
var problem_id = $("#problem_id").val();
var problem_comment = $("#problem_comment").val();
var dataString = 'problem_id=' problem_id 'amp;problem_comment=' problem_comment;
if( problem_id == '' || problem_comment == '' )
{
$('.comment_success').fadeOut(200).hide();
$('.comment_error').fadeOut(200).show();
}
else
{
// Now check if the person is logged in.
$.ajax({
type: "POST",
url: "/auth/check_login.php",
dataType: "json",
success: function(data)
{
// Now add the comment!
$.ajax({
type: "POST",
url: "/problems/add_problem_comment_ajax.php",
dataType: "json",
data: dataString ,
success: function(data)
{
$('.add_message_success').fadeIn(200).show();
$('.add_message_error').fadeOut(200).hide();
// Here can update the right side of the screen with the newly entered information
alert ("success");
},
error: function(data)
{
alert ("add comment error, data: " data);
}
});
},
error: function(json)
{
$("#loginpopup").dialog();
return false;
}
});
}
return false;
});
});
</script>
На самом деле он работает нормально и вызывает AJAX в обоих местах, а серверный код ведет себя так, как я хочу, и я доволен тем, как он работает.
К сожалению, вложенный вызов jQuery AJAX всегда возвращается в случай ошибки. Я не знаю почему. Как я могу понять, почему он это делает?
Я не получаю никаких ошибок в консоли JavaScript Chrome или в журналах моего PHP-сервера. Есть идеи, что это может быть?
Кроме того, как я могу определить, что находится в возвращаемой переменной данных? То, как я его вывожу, сейчас просто говорит «Объект object»
Спасибо!!
Комментарии:
1. Почему второй ajax? разве вы не можете сделать это прямо при первом вызове? Однако, используя второй файл, вы делаете проверку там
2. @DamienPirsy Я не знал, что вы можете сделать это за один вызов. Я имею в виду, мне нужно вызвать два разных AJAX-скрипта.
3. Использование
console.log("Add comment error. Data", data)
вместоalert()
даст вам больше информации. Он выводит в консоль JavaScript, которую часто можно открыть с помощью Ctrl-Shift-J, но также можно найти в Firebug (если он у вас установлен).4. @GeekedOut AJAX-скрипт — это php-файл, в котором вы можете делать все, что захотите. Подумайте о тех временах, когда AJAX не использовался, вы бы все делали на стороне сервера, так что: вы могли бы либо разделить их на два разных вызова, либо сгруппировать в один, который выполняет все; таким образом, вы не столкнетесь с подобной проблемой nexted ajax; вы всегда можете просмотреть исходный код jquery, чтобыв любом случае посмотрите, как он обрабатывает вызов, и посмотрите, возможна ли ваша реализация, или проверьте журналы ошибок, которые на самом деле сообщают вам, что и где происходит не так
Ответ №1:
Попробуйте изменить свою функцию ошибки следующим образом:
$.ajax({
...
error : function (xhr, status, error){
// Error Text //
console.log(xhr.responseText); // Server Response
console.log(xhr.statusText); // Server Status Response
console.log(error); // Thrown Error
// Data Object //
console.log(data); // Displayed in console.
}
...
});
Объект xhr является частью объекта XMLHttpRequest .
Вся информация появится в консоли javascript.
Надеюсь, это поможет!
Комментарии:
1. ах, вы знаете, это сделало вещи более понятными. Я получаю обратно код 200, что означает его успех. Но в responseText я получаю текст обратно, который я пытаюсь вывести обратно на страницу. Я использую команду PHP echo для отображения HTML. В других частях сайта этот метод работал, поэтому не совсем уверен, почему он не работает сейчас.
2. @GeekedOut Вы пробовали console.log(статус) и console.log (ошибка), чтобы узнать, содержат ли они какую-либо информацию?