我有一个简单的函数,它只将已翻译的消息从服务器返回给客户端。但是当我将结果传递给var。
时,结果显示未定义function MessageNoResult() {
$.ajax(
{
type: "POST",
async: true,
url: '<%= ResolveUrl("~/WebMethods.aspx/MessageNoResult") %>',
contentType: "application/json; charset=utf-8",
dataType: "json",
success: function(msg) {
return msg.d;
}
});
}
结果 - &gt;未定义(不良)
var message = MessageNoResult();
alert(message);
当我查看标题时,它给了我:
Server ASP.NET Development Server/9.0.0.0
Date Wed, 09 Nov 2011 09:01:31 GMT
X-AspNet-Version 2.0.50727
Cache-Control private, max-age=0
Content-Type application/json; charset=utf-8
Content-Length 24
Connection Close
Response {"d":"No search result"}
JSON d "No search result"
为什么我仍然得到一个未定义的结果?
答案 0 :(得分:3)
您可以将回调函数传递给MessageNoResult
函数
function MessageNoResult(callback) {
$.ajax(
{
type: "POST",
async: true,
url: '<%= ResolveUrl("~/WebMethods.aspx/MessageNoResult") %>',
contentType: "application/json; charset=utf-8",
dataType: "json",
success: function(msg) {
callback(msg);
}
});
}
然后致电:
MessageNoResult(function(msg) {
alert(msg.d);
});
答案 1 :(得分:2)
当您的代码移至alert(message)
行时,ajax调用仍在执行,因此message
变量没有值。
您需要将响应的值传递给success
方法中的函数。
success: function(msg) {
myFunction(msg.d);
}
// outside ajax call
function myFunction(ajaxValue) {
alert(ajaxValue)
}
答案 2 :(得分:0)
ajax调用是一个异步调用,你正在MessageNoResult之后运行警报,因此在你真正完成ajax请求之前,消息没有任何价值。
您需要在ajax调用的成功中运行警报。
答案 3 :(得分:0)
您正试图从成功返回,这是一个回调函数。设置一个全局变量并在成功函数retmess = msg.d
中使用它来存储返回值或设置html元素的内容jQuery('#status').html(msg);
答案 4 :(得分:0)
您的代码:
var message = MessageNoResult();
将message
变量设置为MessageNoResult
功能的返回值。由于此函数中没有返回值,因此将undefined
作为响应。
处理此问题的方法是处理success
回调中Ajax调用的返回值。
对于类似的问题,请参阅我的回答here: