在javascript中更改变量值
我在document.ready()之前声明了全局变量 然后在document.ready函数中在javascript中更改变量值,javascript,jquery,jqgrid,Javascript,Jquery,Jqgrid,我在document.ready()之前声明了全局变量 然后在document.ready函数中 beforeSubmit: function (postdata, formid) { $.getJSON('@Url.Action("","")', { Id: postdata.Id}, function (data) { getStatus =
beforeSubmit: function (postdata, formid) {
$.getJSON('@Url.Action("","")', { Id: postdata.Id},
function (data) {
getStatus = data;
alert(getStatus)// this give the correct status
});
alert(getStatus)// but this one shows null
return [false];
},
我尝试了很多方法,但没有成功。请帮助我,Ajax请求是异步的。执行时,
$.getJSON
会立即执行下一行,即警报(getStatus)
,同时未执行getJSON的success函数。它不会等待来自服务器的响应
因此,您只需要在成功事件中进行处理。ajax请求是一个异步操作,这意味着它发送一个请求,当服务器发送其应答时,会调用success(或failure)方法。在您的情况下,这意味着当执行
$.getJSON
时,它会立即执行下一行,即警报(getStatus)
。稍后,一旦从服务器收到响应,就会执行getJSON的success函数
如果您希望浏览器在执行任何其他操作(包括在ajax调用之后立即执行行)之前等待ajax调用完成,则需要使用常规ajax调用(而不是getJSON
)并向其添加async:false
,例如:
function (postdata, formid) {
$.ajax({
url: myUrl,
dataType: 'json',
async: false,
data: myData,
success: function(data) {
getStatus = data;
alert(getStatus);
}
});
alert(getStatus);
return [false];
}
AJAX是异步的!您的“this one shows null”将首先运行。在AJAX调用完成之前。一段时间后,在函数已经返回之后,当AJAX调用完成时,回调将运行,警报将显示正确的值。在那一秒
alert()
,$getJSON()
还没有返回(或者甚至可能运行)然而,@janina:$.getJSON
是$.ajax
的缩写。这意味着$.getJSON
实际上是在内部调用$.ajax
。您需要做的是将涉及getStatus
的所有内容都放在回调中。“真的没有必要使用全局变量,这就是回调/承诺的用途。@Rocket Hazmat能否请您给出一个简单的示例或链接,我从未使用过回调,我在谷歌上搜索过,但不知道哪一个在我的应用程序中有效。”case@janina:功能(数据){
您的代码中有。这是回调。在那里您可以访问数据
并使用它。虽然这样做有效,但不建议使用async:false
,因为在AJAX调用完成之前,它将锁定浏览器(您不能单击页面上的任何内容)。
function (postdata, formid) {
$.ajax({
url: myUrl,
dataType: 'json',
async: false,
data: myData,
success: function(data) {
getStatus = data;
alert(getStatus);
}
});
alert(getStatus);
return [false];
}