我已经让自己这个小脚本从数据库返回一个值,但我发现在$.ajax()
函数的末尾,不再保存存储的值。我们如何存储它以便我们可以在$.ajax()
之外使用。从服务器返回的值只是一个数字23.
$(function(event) {
var valueToBeUsed;
var value;
$.ajax({
type: "GET",
url: "get.php",
data: {value: "like"},
success: function(data) {
value = data;
alert(value); //first time alert shows "23"
}
});
valueToBeUsed = value;
alert(valueToBeUsed); //returns "undefined"
});
答案 0 :(得分:2)
jQUery $.ajax()
函数默认以异步方式运行,意思是,进程不会等待ajax响应,但是你可以在下面执行任务,
方式
使ajax请求同步:代码等待ajax响应继续下一个进程,但这不是一个好主意,因为该页面将被冻结,直到ajax没有响应
$.ajax({async: false})
你可以在ajax成功回调函数中使用callback
函数,并执行任务到回调函数,见下面的示例代码
$(function(event) {
var valueToBeUsed;
var value;
var assignValue = function(data){
value = data;
alert(value);
}
$.ajax({
type: "GET",
url: "get.php",
data: {value: "like"},
success: function(data) {
assignValue.call(this, data);
}
});
});
答案 1 :(得分:0)
ajax调用是异步的,这意味着它不会等待来自调用的返回数据继续处理。在收到来自ajax调用的响应并处理成功函数之前,函数中的最后两个语句很可能会被处理。
要在ajax调用之外使用此值,可以在此函数的范围之外定义变量,并且可以使用success函数来设置它。
var value;
$(function(event) {
$.ajax({
type: "GET",
url: "get.php",
data: {value: "like"},
success: function(data) {
value = data;
alert(value); //first time alert shows "23"
// Call function here to use newly set value
}
});
});
答案 2 :(得分:0)
研究在jQuery中使用$.when
解析promise:
https://api.jquery.com/jquery.when/
因为您的请求是异步的,所以您的变量在响应之前被设置。如果您使用when / then,则可以告诉您的应用程序"当您使用此ajax调用完成后,请设置我的变量。"
答案 3 :(得分:0)
ajax调用是异步的,因此您的代码不会等待它完成并执行下一个语句而无需服务器的响应。这导致undefined
返回。您需要使用callback
函数或jquery promise在响应到达后执行响应相关代码。您可以像这样重构代码:
function main() {
// some code
ajaxRefresh(url); // ajax call
}
// code to run after ajax response is arrived
function doSomething(data) {
alert(data);
}
// perform you ajax call here
function ajaxRefresh(actionUrl) {
$.ajax({
url: actionUrl,
success: function(data) {
doSomething(data); // or false as appropriate
}});
}