Как получить возвращаемое значение из GET-запроса JQuery? - PullRequest
1 голос
/ 27 августа 2010

Я хотел бы сделать что-то вроде этого:

  function blabla();

  var check = blabla(); 
  if(check == 1) 

Но в моей функции blabla у меня есть запрос Get, и у меня есть обратный вызов, но я не могу получить возвращаемое значение, которое будет возвращаемым значением blablas;

var checkemail = 0; 
    $.get("bla.aspx", {
        day: "friday"
    },
        function(data) {
            console.log(data); 
            checkemail = data;
        });

console.log("checkemail: " + checkemail);
if (checkemail == '1') {

Проблема в том, что переменной данных не назначается переменная checkemail.Почему это не так?

Ответы [ 4 ]

1 голос
/ 27 августа 2010

А как же ...?

function checkMail(data) {
   if (data == '1') {
      ...
   }
}

$.get("bla.aspx",
      { day: "friday" },
      function(data) {
          console.log(data); 
          checkMail(data);
      }
);
0 голосов
/ 27 августа 2010

Я сделал такой код, и он работал нормально.

$.get("/url.php", function(reply){
alert(reply);
});

Возможно, вам необходимо проверить:

  1. bla.aspx что-то возвращает. Это отчасти нелепая отладка вашего кода, пока ошибка лежит в другом месте.
  2. И если bla.aspx что-то возвращает. Просто убедитесь, что это не ноль или пустая строка.
  3. Попробуйте с другой страницы. Может быть, просто возможно, страница bla.aspx отнимает много времени, прежде чем что-то возвращает. Это случилось со мной.

На мой взгляд, в вашем коде нет ничего плохого :) О, я что-то пропустил. Рекомендуется заменить тело вашей функции оператором alert (), чтобы быть уверенным, что вы не допустите ошибок при наборе. Если вы уже попробовали это, пожалуйста, игнорируйте.

0 голосов
/ 27 августа 2010

Это запрос AJAX, а A означает Асинхронный, это означает, что ваш код не останавливается и не ожидает ответа, если вы не скажете так. $.get - это всего лишь оболочка вокруг $.ajax. Если вы хотите, чтобы запрос был синхронным, вам нужно использовать $.ajax вместо этого:

var checkemail = 0; 
$.ajax({
  async: true,
  url: "bla.aspx",
  data: {day:"friday"},
  dataType: text,
  success: function(data){
    console.log(data);
    checkmail = data;
  }
});
console.log("checkemail: " + checkemail);
if (checkemail == '1') { /* do something */ }

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

$.get("bla.aspx", {
    day: "friday"
  },
  function(checkmail) {
    console.log("checkemail: " + checkemail);
    if (checkemail == '1') { /* do something */ }
  }
);

если /* do something */ очень длинный, вы можете поместить его в отдельную функцию и затем вызвать вызов функции для запроса get следующим образом:

var do_something = function(checkmail) {
  console.log("checkemail: " + checkemail);
  if (checkemail == '1') { /* do something */ }
}

$.get("bla.aspx", {
    day: "friday"
  },
  do_something // note the missing `()`, it must be like this
);
0 голосов
/ 27 августа 2010

Можете ли вы переместить свой код if (check == 1) { ... } в обратный вызов?

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