我正在尝试警告ajax请求捕获的返回值。它引用的Web方法返回一个布尔值true或false,当我试图在ajax方法之外访问它时,它会给出一条消息“undefined”:?
<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>
为什么警报(authInfo)给我“未定义”?请帮忙!
这段代码在上述背景下适合哪里?
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};
},
});
};
答案 0 :(得分:3)
您的“$ .ajax()”调用是异步,因此在从服务器返回响应之前,结果不可用。
如果你将“alert()”置于“成功”回调中,它应该有效(如果HTTP事务有效)。
答案 1 :(得分:2)
编辑处理你的新代码:
<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>
答案 2 :(得分:1)
看来:
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,
});
答案 3 :(得分:1)
通过ajax调用获得的请求和响应是asynchronous
。我认为不可能在准备好的函数结束时提醒你得到的值,因为你不确定在函数完成执行之前你会得到你的响应。
答案 4 :(得分:1)
在实际的ajax调用返回之前,您正在警告authInfo
变量。如果你试试这个:
success:function(msg) {
authInfo = msg.d;
alert(authInfo);
}
我认为你会得到正确的结果。
答案 5 :(得分:1)
由于AJAX调用是异步完成的,因此警报在执行时没有值。如果将警报放在成功函数中,您应该看到相应的结果。我还注意到在success函数参数之后$ .ajax参数中有一个额外的逗号。