Вложенный jQuery AJAX заканчивается в случае ошибки, но ошибок не было, и все работало нормально

#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 (ошибка), чтобы узнать, содержат ли они какую-либо информацию?