2011-05-09 161 views
1

建立VAR我需要創建一個函數,並創建Ajax響應一個js變種我可以做這樣的事情:從Ajax響應

function myFunction() { 
    $.ajax({ 
    type: "POST", 
    url: "mypage.php", 
    data: "name=John&location=Boston", 
    success: function(data){ 
     var newVar = (data); 
    } 
    }); 

    return newVar; 
} 

和mypage.php

// db insert 
echo mysql_insert_id(); // return ID of the latest insert 

我在這種情況下,不確定使用數據是否合適。

+1

您應該最有可能使用成功方法中的數據作爲參數調用回調函數,但尚不清楚您要如何處理此示例。 PHP是如何相關的? 'return newVar'是錯誤的。 – mraaroncruz 2011-05-09 21:02:48

回答

4
$.ajax({ 
    type: "POST", 
    url: "mypage.php", 
    data: "name=John&location=Boston", 
    success: function(data){ 
     // <- I'm asynchronous !!! 
     var newVar = (data); 
    } 
}); 

// <- I return before you set me! 
return newVar; 

AJAX請求與服務器交談,然後在一段時間後調用success方法。您可以強制success在請求完成之前不會運行。這意味着你不能返回任何數據。

相反,您需要傳遞迴調並使用異步編程。

你想要做的就是這樣。

function myFunction(callback) { 
    $.ajax({ 
     type: "POST", 
     url: "mypage.php", 
     data: "name=John&location=Boston", 
     success: function(data) { 
      callback(data); 
     } 
    }); 
} 

myFunction(function (data) { 
    // do stuff. 
}); 

PHP看起來不錯。

作爲替代方案,您可能更願意使用jQuery的延遲語法。

function myFunction() { 
    return $.ajax({ 
     type: "POST", 
     url: "mypage.php", 
     data: "name=John&location=Boston" 
    }); 
} 

$.when(myFunction()).then(function(data) { 
    // handle data return 
    someOtherFunction(data); 
}, function(error) { 
    // handle ajax error. 
}); 
+0

這很好,謝謝。如何從「數據」創建一個var? – santa 2011-05-09 22:29:07

+0

@santa爲什麼你需要一個變量。處理函數 – Raynos 2011-05-09 22:30:48

+0

中的數據我需要它傳入另一個函數。我想我明白了。 var newVar = data;我試圖在這個函數之外獲得新的變量。 – santa 2011-05-09 22:39:24

0
  • 關閉不具備公開程度來newVar
  • 您不能從AJAX函數返回,因爲它是異步完成的。
0

的另一個替代使用when由Raynos的建議,你可以設置asyncfalse