jquery将现有(可重用)函数放在ajax请求中 - 不能使用async:false

时间:2012-07-18 13:15:02

标签: jquery function

我有一些ajax功能*例如

 function MyFunctionA(PassingObj) {
            $.ajax({
                url: '123.ashx',data: PassingObj, type: 'POST',contentType: 'application/json',
                success: function (data1) {
                    return data1
                }
                }
            });

 function MyFunctionB(PassingObj) {
            $.ajax({
                url: '456.ashx',data: PassingObj,type: 'POST', contentType: 'application/json',
                success: function (data2) {
                    return data2
                }
                }
            }); 



var GetValuesXY(){
var x = MyFunctionA(PassingObj);            
var y = MyFunctionB(PassingObj);
return x + y;

}

MyFunctionA和MyFunction是在页面上调用的一般函数,如果不可能,我不想实现回调,因为它们可以在不同的情况下使用。 我无法将Ajax函数设置为async:false - 该选项已从v1.8中弃用,我不允许使用它,并且它已导致问题(http://api.jquery.com/jQuery.ajax/

因此,为了确认,我永远无法成功调用函数GetValuesXY(){},因为x将始终未定义,因为它将继续而不等待结果,因为它是异步的。

因此, 目前,我知道如何处理上述问题的唯一方法是合并2,这在这种情况下是不可接受的:

function MyFunctionA(PassingObj) {
            $.ajax({
                url: '123.ashx',data: PassingObj,type: 'POST',contentType: 'application/json',
                success: function (data1) {

                     $.ajax({             //MyFunctionB is effectively copied in here
                        url: '456.ashx',data: PassingObj,type: 'POST',contentType: 'application/json',
                        success: function (data2) {
                            return data1 + data2
                        }
                        }
                    });
                }
                }
            });

现在我完全不能单独使用这两个示例函数,这是非常非常低效的编程方式,因为我可能会有无限量的排列 每当我想使用任何功能时,我都必须为每一个剪切和粘贴

是否不可能至少将函数调用放入ajax请求中?

的一些东西
var myData1;
var myData2;

                $.ajax({
                call MyFunctionA(),
                success: function (data1) {
                    myData1 = data1;
                        $.ajax({
                            call MyFunctionB(),
                            success: function (data2) {
                                myData2 = data2;
                                }
                            }
                        }); 
                    }

                }
            });

(* - 这些只是用于演示目的的虚拟函数)

0 个答案:

没有答案