2013-12-15 3 views
0

У меня есть этот скрипт:JQuery AJAX: возвращает значение

function getUsername() { 
    $.ajax("http://one2xs.com/index.php", { 
     success: function(a) { 
      console.log($(a).find("#left").html().match(/Je bent ingelogd als ([ ^A-z0-9]*)/)[1]); 
      return $(a).find("#left").html().match(/Je bent ingelogd als ([ ^A-z0-9]*)/)[1]; 
     } 
    }); 
} 

alert(getUsername()); 

В консоли журнал это говорит мое имя пользователя: console log

Но предупреждение «не определено», я не знаю, почему. У меня уже есть отладка, но она не будет работать. Кто-нибудь знает, почему мое имя пользователя работает в журнале консоли, но не в предупреждении?

Спасибо.

ответ

1

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

Оставьте предупреждение в функции успеха, и оно будет работать.

+0

Ну, это не идея предупредить имя пользователя, я предупреждаю только о тестировании. Мне нужно имя пользователя позже. – user2897922

+0

Тогда вам нужно установить это в своем обратном вызове. – Jason

0

Вам нужно дождаться «успеха» вызова $.ajax. Так что сделайте примерно следующее:

var username 
function getUsernameFromServer() { 
    $.ajax("http://one2xs.com/index.php", { 
     success: function(a) { 
      username = $(a).find("#left").html().match(/Je bent ingelogd als ([ ^A-z0-9]*)/)[1]; 
      console.log("got username: " + username) 
     } 
    }); 
} 
getUsernameFromServer() 

function getUsername() 
    if (username != null) { 
     return username 
    } else { 
     //de give it a second then try again 
     setInterval(function(){ 
      getUsername() 
     },1000); 
    } 
} 

Это не точное, но дает вам основную концепцию. var username - самая важная часть.

Смежные вопросы