2011-06-03 132 views
0

我的代碼有一個小問題。我發送一個POST請求到我的頁面,完成後它應該返回「OK」,這意味着它的工作。從我的處理函數中調用set_var(data)來設置我的全局變量文本,但問題是我的print_info()返回undefined。

我在這方面花了很多時間,並意識到我的問題與某些方面的範圍有關,但我不知道如何去修復它。如果任何人都可以提供任何指針,那會很棒。

<? 
if($_REQUEST['action'] == 'test') 
{ 
    echo "OK"; 
    die; 
} 

?> 

<script type="text/javascript" src="jquery-1.6.1.js" ></script> 

<script type="text/javascript"> 
var ajax_post_result; 

function set_var(data) 
{ 
    //PRINTS MY TEXT OK 
    alert("SET:: " + data); 

    //SET TO MY GLOBAL VARIABLE 
    ajax_post_result = data; 

    //ALSO PRINTS OK 
    alert("SET2:: " + ajax_post_result); 
} 

function return_handler(data, textStatus) 
{ 
    //THESE BOTH WORK ... BUT ONLY HERE AND WITHIN set_var() 
    //alert("1: " + data); //PRINTS WHAT I NEED 

    //CALL FUNCTION TO SET GLOBAL VARIABLE 
    set_var(data); 
} 

function print_info() 
{ 
    return ajax_post_result; 
} 

function ajax_post(file, data) 
{ 
    $.post(file, data, return_handler); 

    //PRINTS UNDEFINED 
    alert("RETURN:: " + print_info()); 
} 

</script> 

<form id=newform name='testform'> 
<input type="hidden" name="newexample" value="1"> 
Enter Something: <input name="something" id='something1' value="" type="text"> 
<input type="button" value="Submit" name="Submit" onclick="ajax_post('index.php?action=test', $('#newform').serialize()); return false;"> 
</form> 

回答

2

AJAX請求是,就證明了這第一A的縮寫,異步。因此,當您撥打$.post()時,ajax_post函數的執行或多或少會立即繼續,而不會等待請求完成。在return_handler運行以設置全局變量之前,您會收到「返回」警報。

可以使用jQuery.ajax並設置async選項false,這將讓你同步請求。

或者,我推薦這種策略,只有在請求完成後纔會發生所有需要發生的事情。

+0

謝謝,我轉向使用$ .ajax,現在一切正常。 – user591162 2011-06-03 04:03:10

2

你的問題是由於AJAX的異步性質。

您應該在回調函數中執行所有後期AJAX處理。像這樣的事情(使用當前的功能)

$.post(file, data, function(data, textstatus) { 
    return_handler(data, textstatus); 
    alert("RETURN:: " + print_info()); 
}); 

雖然你可以很容易地結合您的功能集成到一個閉合(減去警報),例如

$.post(file, data, function(data, textstatus) { 
    ajax_post_result = data; 
});