Ajax неверный ответ на запрос сервера - PullRequest
1 голос
/ 31 июля 2011

Привет, я получил код ajax следующим образом:

$.ajax({
                type:"POST",
                url: 'sample.php',
                data:"data="+data,
                success: function(server_response) { 
                $('.functions').ajaxComplete(function(event, request){

                  if(server_response == 0)
                     {
                                showmsg('An email with instructions to reset password has been sent to your email address. Please check it.');
                     }
                  else if(server_response == 1)
                    {
                                showmsg('Email address was not found in our database. Please enter a valid email address');
                    }
                  else
                    {
                                showmsg('Some problem occured while sending you an email. Please try again.');                                    
                    }


                                exit();
        });

Код работает правильно с первого раза.Однако, если я отправлю код без обновления страницы, будет получен предыдущий ответ.Например, если я загружаю страницу в первый раз и получаю ответ из sample.php со значением 0, сообщение отображается правильно.Однако, если я выполняю ajax-вызов без обновления страницы и получаю ответ из sample.php как 1, отображается предыдущее сообщение.Какой бы вывод я ни получил, я получу одно и то же сообщение для всех, пока не обновлю страницу.В чем проблема?Код работает правильно.

Ответы [ 2 ]

2 голосов
/ 31 июля 2011

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

Настройка jQuery (указывает AJAX-вызовам не кэшировать результаты)

$(document).ready(function(){
    $.ajaxSetup({ 
        cache: false 
    });
});

Случайное начальное число (при добавлении в URL сервер заставляет поверить в новый запрос)

$.ajax({
    type:"POST",
    url: 'sample.php?rnd=' + Math.random(),
    data:"data="+data,
    success: function(server_response) { 
    //... rest of the code      
});

Использование текущей метки времени в качестве начального числа (аналогично предыдущему, за исключением использования текущей метки времени)

$.ajax({
    type:"POST",
    url: 'sample.php?rnd=' + Date().getTime(),
    data:"data="+data,
    success: function(server_response) { 
    //... rest of the code      
});

Первый вариант удобен в том случае, если на одной странице выполняется много запросов AJAX без реальных недостатков.

Второй вариант почти всегда является хорошим выбором. У него тоже нет особых минусов.

Третий вариант также хорош, но он может быть опасен на страницах, которые выполняют более одного AJAX-запроса в секунду, поскольку иногда одна и та же временная метка может использоваться для двух разных запросов, и последующий вызов будет получать кэшированные данные.

РЕДАКТИРОВАТЬ: Если на странице нет $(document).ready(), его можно добавить в раздел заголовка непосредственно перед конечным тегом </head>.

<head>
    <!-- Whatever code already exists in the head section -->
    <script type="text/javascript">
        $(document).ready(function(){
            $.ajaxSetup({ 
                cache: false 
            });
        });
    </script>
</head>
1 голос
/ 31 июля 2011

Подтвердили ли вы, что последующие запросы действительно принимаются и обрабатываются с помощью кода на стороне сервера?Что серверный код возвращается в этих случаях?Может быть, проблема существует там?

Основываясь исключительно на этом описании, похоже, что ответ просто кэшируется.$.ajax() имеет возможность отключить кеширование: cache: false.Это заставит код jQuery каждый раз отправлять запрос на сервер независимо от кэширования браузера.

Дополнительная информация здесь .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...