合并$ .ajax

时间:2011-12-10 03:07:48

标签: javascript jquery ajax

我的页面上有几个ajax调用,我想将它们合并为一个函数。

现在我在几个地方都有这种功能:

function AjaxCallOne () {

 //do something

 $.ajax({
  type: "POST",
  contentType: "application/json; charset=utf-8",
  url: TheURL,
  data: "{'TheData':'" + JsonData + "'}",
  dataType: "json",
  cache: "false",
  success:...
  error:...
 });
}

我想编写一个单独的函数,用于所有类似的ajax调用:

function MyGeneralAjaxCall(TheData, TheURL, TheSuccessFunction, TheErrorFunction) {
  $.ajax({ .... });
}

我的问题是:如果我这样做并且用户几乎同时发送两个ajax调用,在第一次调用的返回数据返回之前进行第二次ajax调用,则成功或错误函数是否会发生触发正确的通话。我担心如果用户在返回第一个调用之前触发第二个调用,那么执行的成功函数将不适用于正确的ajax调用。

感谢。

2 个答案:

答案 0 :(得分:3)

您的方法将按预期工作。您传入的每个成功函数等将由每个关联的AJAX调用单独使用。 (所有参数都将保存在一起。)

答案 1 :(得分:0)

首先,ajax请求没有单一的全局回调集。每个ajax调用都会获得它自己的一组回调。

其次:$ .ajax({...}) 你的MyGeneralAjaxCall ...如果您认为需要一组默认选项,更好的方法是设置

var  defaultoptions = { type: "POST", ...}  //put default options, mimetypes, etc, here 

(或返回的东西),然后在需要的地方执行:

var myajaxoptions = $.extend({},defaultoptions,myoverrides); 
$.ajax(myajaxoptions);

这更具可扩展性。无需弥补“中间人”。您的方法可行,但我可以很容易地看到创建了多个MyGeneralAjaxCall。如果你可以管理不创建5个或更多类似MyGeneralAjaxCall的方法,我想你会做得很好,但它可能会很快变得讨厌。