JQuery等待Ajax结果

JQuery等待Ajax结果,jquery,Jquery,我有一个函数,通过将方法名和数据作为参数来调用Asp.NETWeb服务。向服务发送数据没有问题。但是我的retun值是未定义的 function ServiceCommand(method, mdata) { $.ajax({ url: "Service1.asmx/" + method, type: "POST", dataType: "json",

我有一个函数,通过将方法名和数据作为参数来调用Asp.NETWeb服务。向服务发送数据没有问题。但是我的retun值是
未定义的

function ServiceCommand(method, mdata) {
            $.ajax({
                url: "Service1.asmx/" + method,
                type: "POST",
                dataType: "json",
                data: mdata,
                contentType: "application/json; charset=utf-8",
                success: function (msg) {
                    return msg;
                },
                error: function (e) {
                    return "error";
                }
            });
        }

function Insert()
{
var Msg = ServiceCommand("HelloWorld", "{pwd:'1234',txt:'SomeText'}");
alert(Msg);// undefined

}
如何使ServiceCommand函数等待响应?我正在使用jQuery1.9(
async:false
不起作用) 我看到一些建议使用
$的解决方案。当
时,但我不知道如何在这里使用。

使用async=false

$.ajax({
   url: myUrl,
   dataType: 'json',
   async: false

不使用承诺(.when)的一种简单方法是将回调函数作为第三个参数传递到ServiceCommand中。这个函数将执行您需要对ajax调用的响应执行的任何操作

function ServiceCommand(method, mdata, onSuccessCallback) {
        $.ajax({
            url: "Service1.asmx/" + method,
            type: "POST",
            dataType: "json",
            data: mdata,
            contentType: "application/json; charset=utf-8",
            success: function (msg) {
                if (onSuccessCallback !== undefined) {
                    onSuccessCallback(msg);
                }
            },
            error: function (e) {
                return "error";
            }
        });
    }

function Insert()
{
    var Msg = ServiceCommand("HelloWorld", "{pwd:'1234',txt:'SomeText'}", onSuccess);
    alert(Msg);
}
function onSuccess(msg)
{
    alert(msg);
}

可能与否重复,该答案提示async:false,此处不能使用。那么您没有正确阅读答案。实际上我明确地说不要使用
async:false
。或者您将如何解释“1.同步AJAX调用--不要这样做”?您需要返回值的原因是什么?你能不能在success函数中执行必要的操作?@FelixKling是对的-答案解释了如何传入一个回调函数,这个回调函数可以为success函数设置。谢谢你这么做。也可以使用.when()@aliassce显示选项:如果使用多个Ajax调用/承诺,则只需要
$.when
。我再次建议你看看我链接的答案,它试图解释一切。