Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: $.ajax zmienna niewidoczna dla reszty skryptu
Forum PHP.pl > Forum > Po stronie przeglądarki > JavaScript
omxd
Witam,
mam problem z ustawieniem zmiennej i po użyciu $.ajax
  1. $.ajax({
  2. type: "POST",
  3. url: 'a1.php',
  4. data: ob,
  5. cache: false,
  6. success: function(respond){
  7.  
  8. // alert(respond);
  9. var login = respond;
  10.  
  11. }
  12.  
  13. });
  14. alert(login);
  15. });

Konsola wywala "login is not defined" w jaki sposób ustawić tą zmienna ,aby była widoczna dla reszty skryptu?
pozdrawiam
webdice
[JAVASCRIPT] pobierz, plaintext
  1. var login;
  2.  
  3. $.ajax({
  4. type: "POST",
  5. url: 'a1.php',
  6. data: ob,
  7. cache: false,
  8. success: function(respond){
  9.  
  10. // alert(respond);
  11. login = respond;
  12.  
  13. }
  14.  
  15. });
  16. alert(login);
  17. });
[JAVASCRIPT] pobierz, plaintext


Poczytaj sobie o zasięgu zmiennych w JavaScript.
omxd
Tak jak radziłeś trochę zgłebiłem temat.Możliwe ,że $.ajax tworzy zmiennie które nie mogą być globalne?
Funkcja foo działa jak należy:
  1. var foovar='';
  2. function foo() {
  3. foovar = "test";
  4.  
  5. }
  6. foo();
  7. alert(foovar);

natomiast gdy próbuje robić to samo w $.ajax dostaje komunikat undefined.
  1. var login ='';
  2. $.ajax({
  3. type: "POST",
  4. url: 'a1.php',
  5. //data: ob,
  6. cache: false,
  7. success: function(respond){
  8.  
  9. // alert(respond);
  10. login = respond;
  11. //alert(login);
  12. }
  13. });
  14. alert(login);
  15.  

Proszę o pomoc raz jeszcze.
pozdrawiam
viking
To po prostu zwykła funkcja jak każda inna więc wszystkie zasady widoczności JS dalej obowiązują. Co zwraca respond?
omxd
podaje rozwiązanie dla tych którzy kiedyś trafią na ten post:)
  1. jQuery.extend({
  2. getValues: function(url) {
  3. var result = null;
  4. $.ajax({
  5. url: 'ajaxmenager.php?login=' + obj,
  6. type: 'get',
  7. // dataType: 'xml',
  8. async: false,
  9. success: function(data) {
  10. result = data;
  11. }
  12. });
  13. return result;
  14. }
  15. });
  16. var login = $.getValues("url");
  17. alert(login);
HgReed
Chodzi o to, że ajax jest asynchroniczny - w wersji:
Kod
var login = null;
$.ajax({
    type: "POST",
    url: 'a1.php',
    //data: ob,
    cache: false,
    success: function(respond) {
        login = respond;
    }
});
alert(login);

wystarczy poczekać:
Kod
var login = null;
$.ajax({
    type: "POST",
    url: 'a1.php',
    //data: ob,
    cache: false,
    success: function(respond) {
        login = respond;
    }
});
setTimeout(function() {
    alert(login)
}, 1000);


Jest tak dlatego, że $.ajax.success wykonuje się po zwróceniu request'a.
omxd
już zakumałem dlatego async: false, załatwiło sprawęwink.gif
wielkie dzięki za pomoc wesołych świąt;D
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.