1

我有一些 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;
                                }
                            }
                        }); 
                    }

                }
            });

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

4

0 回答 0