我已经阅读了很多关于这个问题的问题,我找不到答案。
我想做的事情(我认为这是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
但这对我不起作用。或者我没有正确理解,这是一个解释还是一个例子?我是想输入回调还是应该用它替换它?
有些人说这里叫另一个功能:
这也没有用,数据被传递给函数,我可以在那里使用但是如果我将它保存在变量中它又丢失了并且没有办法返回函数,因为我在哪里得到了什么函数返回?
最后我说你知道什么,我只是将值放在隐藏的字段中,然后我将访问它。这也没有用,我可以把价值放在现场,但是当我试图访问它时......它还没有。
我不应该使用$ .post吗? $ .ajax会有所作为吗?我怎么能做到这一点?难道ajax从数据库中获取值并将其保存在javascript中以供日后使用真的很难吗?每个人都马上就用它吗?这真的很难实现吗?
答案 0 :(得分: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>
答案 1 :(得分:0)
设置一个超出发布功能范围的变量......就像这样:
var returnedData = "";
$.post("test.php", { name: "John", time: "2pm" },
function(data) {
returnedData = data;
}
);
答案 2 :(得分:0)
实现起来并不困难,你只需使用同步请求而不是异步:
var result = $.ajax("test.php", {
async: false,
data: { name: "John", time: "2pm" },
});
但是,即使在jQuery文档中,通常也不鼓励这样做,因为浏览器在等待结果时没有响应。如果可能的话,你应该使用异步方法。
答案 3 :(得分:0)
我一直在寻找答案。我只是通过调用函数来实现它。无论你需要什么变量,写一个函数,并在$ .post()中使用它,如下所示:
$.post( url, { field: value },
function( data ) {
yourFunction(data);
});
function yourFunction(data){
// check against db query
// call other functions
}
就像我说的那样,我仍在寻找更好的解决方案。