2011-05-15 77 views
1

我已經閱讀了很多關於這個問題的問題,我找不到答案。將jquery發佈數據保存在一個變量中

我想做的事情(我認爲這將是2011年最簡單的事情)是從我的數據庫中獲取一些信息與jquery和ajax並將其保存在一個變量,以便後來做一些東西。 5個小時後,我仍然在這裏。這是不可能做到的嗎?

這個典型的例子是:

$.post("test.php", { name: "John", time: "2pm" }, 
    function(data) { 
    alert("Data Loaded: " + data); 
    }); 

$.post("test.php", { name: "John", time: "2pm" }, 
    function(data) { 
    $("somediv").html(data); 
    }); 

這樣的偉大工程......如果你只使用值現在忘掉它。

現在我不想在頁面或警告框中顯示信息,我只是想將它保存在一些變量中,以便稍後可以進行一些計算。

當我將數據分配給變量時,值總是丟失。讀了一堆關於這個答案後,顯然沒有辦法返回數據,因爲該功能是異步和工作方式不同,我們不知道它是如何工作等

比如我嘗試這樣做:

return data from jquery $.post

但這並不適用於我。或者我沒有正確理解,這是一個解釋還是一個例子?我想輸入回叫,還是應該用一些東西來代替它?

有人說調用另一個函數喜歡這裏:

Jquery return post data

這也不能工作,數據傳遞給函數,我可以用它存在,但再次,如果我在一個變量保存它它迷路了,並且沒有辦法返回函數,因爲我從哪裏得到函數返回的內容?

最後我說你知道什麼,我只是把它放在一個隱藏的字段中,然後我就可以訪問它。那也沒用,我可以把價值放在這個領域,但是當我嘗試訪問它時......它還沒有。

我不應該使用$ .post? $ .ajax是否有所作爲?我怎樣才能做到這一點? ajax真的很難 - 從數據庫中獲取一個值並將其保存在JavaScript中以備後用?大家是否馬上使用它?這真的很難實現嗎?

回答

0

你的問題是變量作用域,你需要一個定義在ajax請求的「匿名」回調函數之外的變量。否則數據會丟失,因爲您不能簡單地「返回」它。

你的代碼可能是這樣的:

<html> 
<head> 
    <script type="text/javascript"> 

    // global storage 
    var myData; 

    // this function will be called if there is a response from the ajax request 
    function doSomethingWith(response) { 

     // maybe perform some formatting, parsing before 

     // save to global variable 
     myData = response; 
    } 


    // some click handlers for demonstration 

    $('#start').click(function() { 
     $.post("test.php", { name: "John", time: "2pm" }, 
     function(data) { 
      // call callback 
      doSomethingWith(data); 
     }); 
    }); 

    $('#show').click(function() { 
     alert("Response was: " + myData); 
    }); 

    </script> 
</head> 
<body> 
    <a id="start" href="#">Fire AJAX Request!</a><br/> 
    <a id="show" href="#">Show Response!</a> 
</body> 
</html> 
+0

他已經嘗試了這種方法,但是使用隱藏字段而不是全局變量。問題不是範圍,而是時間。 – Guffa 2011-05-15 20:46:15

+0

我不會將任何數據放入隱藏字段,這可能會導致意外的行爲,因爲您返回的代碼可能包含特殊字符,如<,>,「等等。更好的解決方案是使用jQuery [.data(key,value)]] (http://api.jquery.com/data)將數據附加到元素上 – sled 2011-05-15 20:54:20

+0

這是真的,但它並不重要,隱藏字段只是用作全局存儲,所以如果它不起作用那麼,它也不會與全局變量一起工作 – Guffa 2011-05-15 20:59:46

0

設置你的職位功能範圍之外的變量...像這樣:

var returnedData = ""; 
$.post("test.php", { name: "John", time: "2pm" }, 
    function(data) { 
    returnedData = data; 
    } 
); 
0

它一點都不難做到,你只需要使用一個synchonous請求而不是一個asynchonous:

var result = $.ajax("test.php", { 
    async: false, 
    data: { name: "John", time: "2pm" }, 
}); 

然而,這通常不鼓勵,甚至jQuery的文檔中,作爲瀏覽器在等待結果時無響應。如果可能的話,你應該使用異步方法。

0

我一直在尋找答案。我只通過調用一個函數來實現它。無論你需要的變量,寫一個函數,並在$。員額使用它()像這樣:

$.post(url, { field: value }, 
     function(data) { 
     yourFunction(data); 
     }); 

    function yourFunction(data){ 
     // check against db query 
     // call other functions 
    } 

就像我說的,我還在尋找一個更好的解決方案。

相關問題