2011-05-15 42 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 
    } 

就像我说的,我还在寻找一个更好的解决方案。

相关问题