我一定是犯了一个愚蠢的错误,但是我无法返回我从$ .post函数获得的数据并将其存储在变量中,不仅如此,我无法从该函数中返回任何内容。例如:
function test(){
$.post("demo_test_post.asp",
{
name:"Donald Duck",
city:"Duckburg"
},
function(data,status){
return(data)
});
}
var foo = test()
alert(foo)
它说foo是未定义的。但是要更进一步,即使我这样做了:
function test(){
$.post("demo_test_post.asp",
{
name:"Donald Duck",
city:"Duckburg"
},
function(data,status){
var bar = "bar"
return(bar)
});
}
var foo = test()
alert(foo)
它仍然说foo未定义......我必须做错事或误解某事。有人可以帮忙。
由于
答案 0 :(得分:12)
$ .post是一个异步函数。来自函数的控件将在运行后立即返回,但可能会在稍后收到来自post的响应。
所以你可以做的不是返回,而是使用回调函数并在外面定义回调函数。
说,
function test(){
$.post("demo_test_post.asp",
{
name:"Donald Duck",
city:"Duckburg"
},
function(data,status){
my_function(data)
});
}
function my_function(data){
// you can operate on data here
}
答案 1 :(得分:3)
您不会从post()
返回任何内容。 function(data, status) {}
中的内容实际上是一个回调函数,并且不会像您想象的那样将结果返回给post()
方法。
阅读this article以获取更多信息
答案 2 :(得分:3)
jQuery post()
默认为异步,这意味着您永远不能从这样的函数返回值。
async (默认值:true)
类型:布尔值
默认情况下,所有请求都是异步发送的(即设置为 默认为true)。如果需要同步请求,请将此选项设置为 假的。
您需要提供回调函数才能更新值。
e.g。一个非常基本的例子。
var foo;
test();
function test(){
$.post("demo_test_post.asp",
{
name:"Donald Duck",
city:"Duckburg"
},
function(data,status){
var bar = "bar"
foo = bar; // assign foo
});
}
}
或者,您可以将jQuery Ajax更改为同步。在这里看一下这篇文章How can I get jQuery to perform a synchronous, rather than asynchronous, Ajax request?
答案 3 :(得分:2)
尝试使用.done()执行返回的数据。这应确保它获取数据,并且在完成之前不会设置变量或警报数据。
$.post("demo_test_post.asp", { name: "Donald Duck", city: "Duckburg" })
.done(function(data) {
alert("Data Loaded: " + data);
//Or return data;
});
答案 4 :(得分:1)
jQuery AJAX请求是异步进行的,这意味着请求已启动,$.post()
方法或多或少立即返回。该请求由浏览器在后台处理。请求完成后,jQuery会调用您提供给$.post()
的回调函数。您可以使用async: false
告诉jQuery阻止,直到请求完成,但不建议这样做,因为它几乎肯定会导致糟糕的性能和糟糕的用户体验。
你应该做的是编写代码,使得依赖于AJAX响应的逻辑被你的回调函数启动。类似的东西:
function handleAjaxResponse(responseData) {
// do something with the response.
}
function doAjax() {
$.post("demo_test_post.asp",
{
name:"Donald Duck",
city:"Duckburg"
},
function(data, status){
handleAjaxResponse(data);
});
}
doAjax();
答案 5 :(得分:1)
您正在使用更精简的.post()
方法。与(IMHO)合作更加挑剔,而且比较大的形式$.ajax()
更不强大。
就个人而言,我发现.ajax()
方法更受欢迎,因为添加的结构使格式化更容易。此外,您可以使用.ajax
执行更多操作(还有更多选项,例如关闭异步,当您想要延迟处理直到返回数据时,这有时非常有用。)
Here is a simple example使用完整的$.ajax()
方法。请注意底部的success
函数 - 您可以使用从其他PHP文件发回的数据!