我有一个名为 result 的全局变量和一个函数,目的是更改结果的值。这是我尝试过的代码:
checkdate();
function checkdate() {
//defining startdate,enddate,hotel_id
$.ajax({
method: 'GET',
url: '/checkdate',
data: {startdate : startdate, enddate : enddate, checkroom : 1, hotel_id : hotel_id},
success: function(response){
storeResponse(response);
}
});
}
var result = [];
function storeResponse(response) {
window.result = response;
}
alert(result);
警报什么也不会返回,但是如果我将警报放在函数中,它将返回 response 。这似乎很容易,但我无法弄清楚。
该函数在所有这些代码之前被调用。
答案 0 :(得分:1)
您需要在这里了解两件事:
var result
与window.result
不同,因此请使用window.result = "Test";
而不是var
声明。storeResponse()
代码之前调用alert
,以便它设置新值,然后在alert
中获取该值。
window.result = "Test"; //in global scope
function storeResponse(response) {
window.result = response;
console.log(window);
}
storeResponse("Hello");
alert(result);
答案 1 :(得分:0)
您应该首先调用该函数,以便填充结果变量。
var result = []; //in global scope
function storeResponse(response) {
window.result = response;
}
storeResponse('callSomething');
alert(result);
答案 2 :(得分:0)
您说您首先要调用该函数,所以您必须具有以下内容:
./instances/61df18f8-ff4b-4e27-afb2-e2e8aaffde1d/scripts/part-001
./instances/61df18f8-ff4b-4e27-afb2-e2e8aaffde1d/user-data.txt
./instances/61df18f8-ff4b-4e27-afb2-e2e8aaffde1d/user-data.txt.i
./instances/61df18f8-ff4b-4e27-afb2-e2e8aaffde1d/obj.pkl
问题如下:
在第一行中,您正在调用函数。该函数在全局范围内的窗口中设置新的storeResponse('someResponse');
var result = []; //in global scope
function storeResponse(response) {
window.result = response;
}
alert(result);
变量
在第二行中,您正在覆盖result
var:result
,它使您可以使用空数组,这就是警报看上去为空的原因
尝试注释第二行,它将起作用:
var result = [];
或更妙的是,先声明var:
storeResponse('someResponse');
//var result = []; //in global scope
function storeResponse(response) {
window.result = response;
}
alert(result);
答案 3 :(得分:0)
那是因为AJAX是异步的。意味着代码是非阻塞的。 想象一下,在执行其余代码时,将AJAX调用传递给另一个线程进行处理。在AJAX请求收到响应之前触发警报。这就是为什么如果您在回调中执行警报的原因。