если запрос Ajax не завершен, ссылки HTML не могут щелкнуть - PullRequest
1 голос
/ 24 декабря 2009

У меня есть запрос jquery ajax на странице моего веб-сайта, и на каждой странице мне нужно отправить этот запрос на сервер, чтобы получить статус. Но у него есть проблема: после того, как я открою страницу в браузере, перед тем как этот запрос вернет данные, моя ссылка на всю страницу не может работать, они не могут щелкнуть. так у кого-нибудь есть решение для этого? например: заставить страницу загружать этот скрипт после загрузки страницы или др.

$(function(){      
      var login_status;
      $.ajax({
        async:false,
        url:<%= url(:login_status_header_session, :from => from_uri).to_json %>,
        dataType:"html",
        success:function(data, textStatus){
          login_status = data;
        }
      });
      if(login_status) {
        $(".loginDetails p .login_status").html(login_status);
      } else {
        $(".loginWrapper").remove();
      }
  });

это actin login_status_header:

self.headers ["Cache-Control"] = "no-cache, must-revalidate"
self.headers ["Expires"] = "0" частичный "session_header",
: format => "html"

Ответы [ 3 ]

3 голосов
/ 24 декабря 2009

Сначала удалите строку async:false,. Таким образом, интерфейс будет продолжать отвечать, пока обрабатывается AJAX-запрос. Во-вторых, перенесите проверку результата в функцию success - в противном случае она запускается до завершения запроса, и поэтому login_status еще не установлен (и поэтому по умолчанию имеет значение null, что рассматривается как false).

$(function(){      
      var login_status;
      $.ajax({
        url:<%= url(:login_status_header_session, :from => from_uri).to_json %>,
        dataType:"html",
        success:function(data, textStatus){
          login_status = data;
          if(login_status) {
            $(".loginDetails p .login_status").html(login_status);
          } else {
            $(".loginWrapper").remove();
          }
        }
      });
  });
2 голосов
/ 24 декабря 2009

Без дополнительной информации я могу только догадываться, и я предполагаю, что поскольку вы используете async: false, интерфейс не отвечает. Есть ли причина делать запрос синхронно? Если нет, попробуйте удалить async:false и посмотрите, работает ли он.

1 голос
/ 24 декабря 2009

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

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