2016-07-12 16 views
0

Ich mache ein einfaches Skript, so dass ein Stück Code in einer Schleife laufen kann.JavaScript Variable undefined außerhalb Ajax

var num_rows_php; 
    var num_rows_sessions_php; 
    var num_rows_session_php_teste; 

    $.ajax({ 
    url: 'verify_num_rows.php', 
    success: function(){ 
    num_rows_php = "<?php echo $my_num_rows; ?>"; 
    num_rows_session_php = "<?php echo $_SESSION['transaction_count']; ?>"; 
    num_rows_session_php_teste = "<?php echo $_SESSION['teste_num']; ?>"; 
    alert('num_rows_session' + num_rows_session_php); 
    alert('num rows session php teste' + num_rows_session_php_teste); 
    }, 

    }); 

    alert('teste fora do ajax' + num_rows_session_php_teste); 

Ich habe nur den relevanten Teil hier, wo mein Problem ist. Also erstelle ich die Variablen außerhalb der Ajax-Funktion, damit ich sie innerhalb der Ajax-Funktion aktualisieren kann. Dieser Codeabschnitt wird alle 5 Sekunden ausgeführt. Selbst wenn der Ajax-Aufruf nicht zuerst erfolgt, sollten die Variablen jederzeit aktualisiert werden. Mein Problem ist, wenn ich die Alerts innerhalb der Ajax-Funktion mache, sind die Werte korrekt, aber die Warnung außerhalb der Ajax-Funktion sagt die Variable ist undefiniert. alert('teste fora do ajax' + num_rows_session_php_teste); ist undefiniert, auch wenn der Code 10 mal läuft. Warum ist das ?

EDIT:

ich das versucht:

$.ajax({ 
      url: 'verify_num_rows.php', 
      success: function(){ 
      num_rows_php = "<?php echo $my_num_rows; ?>"; 
      num_rows_session_php = "<?php echo $_SESSION['transaction_count']; ?>"; 
      num_rows_session_php_teste = "<?php echo $_SESSION['teste_num']; ?>"; 
      alert('num_rows_session' + num_rows_session_php); 
      alert('num rows session php teste' + num_rows_session_php_teste); 
      if (num_rows_session_php_teste != num_rows_session_php) 
      { 
       alert(num_rows_session_php_teste); 
       // alert (num_rows_session_php); 
       $('#tbody').load('table_body.php') 
       $('#myfooter').load('myfooter.php') 
       $('#my-list').load('mylist.php') 



     } 
     }, 

     }); 

alles in Ajax-Erfolg Funktion und die Variable wird in dem Moment der Benachrichtigung nicht definiert.

+1

, dass wegen der Asynchronous ist aufruft. Sehen Sie auf Sync vs Async – Navaneeth

+0

, aber wenn ich die Variable auf einen Wert setzen, sollte es nicht bleiben? –

+1

machen Sie Ihre Aktion in AJAX-Erfolg oder machen Sie AJAX temporäre Synchronisierung. –

Antwort

0

Sie können nicht erwarten, dass $ .ajax num_rows_session_php_teste einen Wert zuweist. Da JS von Natur aus asynchron ist, kann die Warnung aufgerufen werden, bevor $ .ajax stattfindet. Daher ist es möglich, dass num_rows_session_php_teste nicht definiert ist, wenn auf den Alarm zugegriffen wird.

+0

Das könnte ein Kommentar sein, keine Antwort –

+0

hm, kann das auch innerhalb des Ajax-Codes selbst passieren? –

+0

Nein, nicht innerhalb des Codes. Weil das $ .ajax aufgerufen wird, geht es in den Erfolg, wo die Variablen zuerst zugewiesen werden. Im Ajaxblock würde es also gut funktionieren, aber nicht draußen. – kawadhiya21

0

Versuchen Sie, async: false auf Ihrer Ajax-Funktion,

$.ajax({ 
    url: 'verify_num_rows.php', 
    async: false, 
    success: function(){ 
    } 
})