Javascript “未定义”用于警告ajax调用响应,为什么?
我试图提醒ajax请求捕获的返回值。它引用的web方法返回一个布尔值true或false,当我试图在ajax方法之外访问它时,它会给出一条未定义的消息:Javascript “未定义”用于警告ajax调用响应,为什么?,javascript,jquery,ajax,Javascript,Jquery,Ajax,我试图提醒ajax请求捕获的返回值。它引用的web方法返回一个布尔值true或false,当我试图在ajax方法之外访问它时,它会给出一条未定义的消息: <script type="text/javascript" language="javascript"> $(document).ready(function () { var authInfo; $.ajax({ type:
<script type="text/javascript" language="javascript">
$(document).ready(function () {
var authInfo;
$.ajax({
type: "POST",
url: "service.asmx/getAuthInfo",
data: "{}",
contentType: "application/json; charset=utf-8",
dataType: "json",
success: function (msg) {
authInfo = msg.d;
},
});
alert(authInfo);
});
</script>
为什么alertauthInfo给我的信息是未定义的??请帮忙
这段代码在上面的上下文中适用于哪里
if(auhthInfo){
$(".ansitem").editable('FetchUpdate.aspx', {
style: 'background-color:inherit;',
type: 'textarea',
indicator: '<img src="spinner.gif">',
event: 'dblclick',
onblur: 'submit',
submitdata: function (value, settings) {
return { orgval: value};
},
});
};
$.ajax调用是异步的,因此在服务器返回响应之前,结果不可用
如果您将警报放在成功回调中,那么如果HTTP事务工作,警报应该会工作。您的$.ajax调用是异步的,因此在服务器返回响应之前,结果不可用
如果将警报放在成功回调中,则如果HTTP事务正常工作,警报应该会正常工作。出现:
alert(authInfo);
在文档准备就绪时立即运行
但是,直到AJAX调用完成后,才初始化变量
尝试将警报移动到:
$.ajax({
type: "POST",
url: "service.asmx/getAuthInfo",
data: "{}",
contentType: "application/json; charset=utf-8",
dataType: "json",
success: function (msg) {
authInfo = msg.d;
alert(authInfo);
},
});
如果需要对值执行更复杂的操作,可以尝试将代码重新分解为另一个函数:
function onSuccess(msg)
{
if(msg.d)
{
window.alert('The value is true!');
}
else
{
window.alert('The value is false!')
}
}
$.ajax({
type: "POST",
url: "service.asmx/getAuthInfo",
data: "{}",
contentType: "application/json; charset=utf-8",
dataType: "json",
success: onSuccess,
});
看来:
alert(authInfo);
在文档准备就绪时立即运行
但是,直到AJAX调用完成后,才初始化变量
尝试将警报移动到:
$.ajax({
type: "POST",
url: "service.asmx/getAuthInfo",
data: "{}",
contentType: "application/json; charset=utf-8",
dataType: "json",
success: function (msg) {
authInfo = msg.d;
alert(authInfo);
},
});
如果需要对值执行更复杂的操作,可以尝试将代码重新分解为另一个函数:
function onSuccess(msg)
{
if(msg.d)
{
window.alert('The value is true!');
}
else
{
window.alert('The value is false!')
}
}
$.ajax({
type: "POST",
url: "service.asmx/getAuthInfo",
data: "{}",
contentType: "application/json; charset=utf-8",
dataType: "json",
success: onSuccess,
});
通过ajax调用获得的请求和响应是异步的。我认为不可能在ready函数结束时提醒您在响应中得到的值,因为您不能保证在函数完成执行之前会得到响应。通过ajax调用得到的请求和响应是异步的。我认为不可能在ready函数结束时警告您在响应中得到的值,因为您不能保证在函数完成执行之前会得到响应。您在实际ajax调用返回之前警告authInfo变量。如果您尝试以下方法:
success:function(msg) {
authInfo = msg.d;
alert(authInfo);
}
我认为您将得到正确的结果。您在实际的ajax调用返回之前警告了authInfo变量。如果您尝试以下方法:
success:function(msg) {
authInfo = msg.d;
alert(authInfo);
}
我想您会得到正确的结果。编辑以处理新代码:
<script type="text/javascript" language="javascript">
$(document).ready(function () {
var authInfo;
$.ajax({
type: "POST",
url: "service.asmx/getAuthInfo",
data: "{}",
contentType: "application/json; charset=utf-8",
dataType: "json",
success: function (msg) {
// alert(msg.d); // here it will work as it is only called when it succeeds.
MyHanlder(msg);
},
});
// alert(authInfo); // here authinfo has no value as the AJAX call may not have returned.
});
function MyHandler(msg) {
if(msg.d){
$(".ansitem").editable('FetchUpdate.aspx', {
style: 'background-color:inherit;',
type: 'textarea',
indicator: '<img src="spinner.gif">',
event: 'dblclick',
onblur: 'submit',
submitdata: function (value, settings) { return { orgval: value}; },
});
};
}
</script>
编辑以处理新代码:
<script type="text/javascript" language="javascript">
$(document).ready(function () {
var authInfo;
$.ajax({
type: "POST",
url: "service.asmx/getAuthInfo",
data: "{}",
contentType: "application/json; charset=utf-8",
dataType: "json",
success: function (msg) {
// alert(msg.d); // here it will work as it is only called when it succeeds.
MyHanlder(msg);
},
});
// alert(authInfo); // here authinfo has no value as the AJAX call may not have returned.
});
function MyHandler(msg) {
if(msg.d){
$(".ansitem").editable('FetchUpdate.aspx', {
style: 'background-color:inherit;',
type: 'textarea',
indicator: '<img src="spinner.gif">',
event: 'dblclick',
onblur: 'submit',
submitdata: function (value, settings) { return { orgval: value}; },
});
};
}
</script>
由于AJAX调用是异步完成的,因此警报在执行时没有值。如果将警报放在成功函数中,您应该会看到相应的结果。我还注意到,在success函数参数之后,$.ajax参数中有一个额外的逗号。因为ajax调用是异步完成的,所以警报在执行时没有值。如果将警报放在成功函数中,您应该会看到相应的结果。我还注意到,在success函数参数之后,$.ajax参数中有一个额外的逗号。我认为您在服务器端有一个错误,请通过FF上的firebug或chrome上的开发者工具检查响应,这可能也是因为json无效,无论如何,您需要检查服务器输出我认为您在服务器端有错误,通过FF上的firebug或chrome上的developer tools检查响应,也可能是因为json无效,无论如何,您需要检查哪些服务器输出如何将条件逻辑放在那里/你可以将你的全部逻辑放在成功块中。。或者,您可以调用一个传递要使用的变量的函数,并将逻辑移到该变量function@ShaneAdrianMuaz是的,就像Ajai说的,您可以将所有逻辑直接放在成功处理程序中,或者将对函数的调用放在成功处理程序中,然后将逻辑放在该函数中。关键是,在浏览器调用成功处理程序以响应完成的请求之前,它还没有完成。无法告诉浏览器等待异步请求完成。@shanedarianmuaz我在回答中包含了一些示例代码,说明了Pointy在说什么。底线是,波蒂的答案是正确的,而且解释得最好。那么我该如何把条件逻辑放在那里呢/你可以将你的全部逻辑放在成功块中。。或者,您可以调用一个传递要使用的变量的函数,并将逻辑移到该变量function@ShaneAdrianMuaz是的,就像Ajai说的,您可以将所有逻辑直接放在成功处理程序中,或者将对函数的调用放在成功处理程序中,然后将逻辑放在该函数中。关键是,在浏览器调用成功处理程序以响应完成的请求之前,它还没有完成。无法告诉浏览器等待异步请求完成。@shanedarianmuaz我在回答中包含了一些示例代码,说明了Pointy在说什么。博托
m line is Pointy的答案是正确的,解释得最好。我需要获得authInfo来做一些条件逻辑!您需要在success:function中计算authInfo,或者从那里调用另一个函数。您需要传入参数,对吗?在方法调用中,u没有放置参数success:key只是引用函数对象。无论最终调用它的是什么,都将传入任何参数。是的,如果您有success:onSuccessmsg,那么您实际上将调用该函数并将success:设置为该函数返回的任何参数!我需要获得authInfo来做一些条件逻辑!您需要在success:function中计算authInfo,或者从那里调用另一个函数。您需要传入参数,对吗?在方法调用中,u没有放置参数success:key只是引用函数对象。无论最终调用它的是什么,都将传入任何参数。是的,如果您有success:onSuccessmsg,那么您实际上将调用该函数并将success:设置为该函数返回的任何参数!我编辑了这个问题,你能检查一下并告诉我最后一段代码块shud在哪里吗?@Shane将它放在alertmsg.d的位置,用msg替换authInfo。d@ShaneAdrianMuaz-Kevin B.是对的,但我也建议您将第二段代码作为函数本身编写,在AJAX调用的成功部分传递调用,并将msg.d传递给它。。。这使AJAX调用保持干净,并且处理程序方法易于在其他地方维护。回答你的问题吗?我编辑了这个问题,你能检查一下并告诉我最后一段代码块shud的位置吗?@Shane将它放在alertmsg.d的位置,用msg替换authInfo。d@ShaneAdrianMuaz-Kevin B.是对的,但我也建议您将第二段代码作为函数本身编写,在AJAX调用的成功部分传递调用,并将msg.d传递给它。。。这使AJAX调用保持干净,并且处理程序方法易于在其他地方维护。那能回答你的问题吗?