1

我试图在 Jquery 中使用 ajax 将数据发送到 2 个不同的 url
我可以这样想:

$.ajax({ 
type: 'POST' 
url: 'some_url1' 
data: 'some data'  
success: function(data){  
$.ajax ({  
type: 'POST'  
url: 'some_url2' 
data: 'some data' 
success: function(data){}
}) 
}  
}) 

还有其他方法吗?
谢谢

4

4 回答 4

5

当你有这样的代码时:

$.ajax({ 
  type: 'POST',
  url: 'some_url1',
  data: 'some data', 
  success: function(data){  
    $.ajax ({  
      type: 'POST',
      url: 'some_url2',
      data: 'some data',
      success: function(data){}
    });
  }
});

应该跳出来的第一件事是重复的数量。您基本上有两个几乎相同的代码块。除非有很好的理由说明它应该被复制(例如,如果两个代码块负责两个不同的业务所有者/角色并且可能彼此独立地更改),那么将复制的代码抽象为一个函数.

在这种情况下,两个重复的代码块之间只有两个区别:

  1. 网址
  2. 成功回调

因此,您从重复代码中提取的函数应该接受这两个参数作为参数:

var makeAjaxCall = function (url, success_callback) {
  $.ajax ({  
    type: 'POST',  
    url: url,
    data: 'some data',
    success: success_callback
  });
};

然后您的示例将像这样调用该函数:

makeAjaxCall(
  'some_url1',
  makeAjaxCall(
    'some_url2',
    function() {}
  )
);

请注意,在您的示例中,您将data参数传递给回调函数,尽管您没有使用它。出于问题的目的,这是一个最小的人为示例吗?实际上,您正在使用该参数?如果是这样,那么提取的函数也需要处理它。但在您这样做之前,您需要更明确一点,因为您的示例在这方面令人困惑,并且可能以意想不到的(或至少不直观的)方式表现。当你的内部 AJAX 成功回调接收到它的data参数时,你希望它是内部 AJAX 调用的结果吗?还是您希望它data是传递给包含内部 AJAX 调用的函数的参数?代码中的意图不清楚。

于 2012-09-30T00:51:55.270 回答
0

看起来是这样的。。

$(function() {
     // Make the first ajax call with Parameters
     ajaxCall('firsturl' , firstdata , callbackFunction1 );

});

function callbackFunction1(result) {
    // Make the econd ajax call from the callback function1
     ajaxCall('secondurl' , seconddata , callbackFunction2 ); 
};

 function callbackFunction2(result) {
    // Success call back of second ajax request     
}; 

function ajaxCall(url, usrData, callbackFunction) {
    $.ajax({
        type: 'POST'
        url: url,
        data: usrData,
        success: callbackFunction
    });
};
于 2012-09-30T00:57:49.797 回答
0
function ValidateForm() {     

    //Data Post to FirstForm
    var str = $("#FirstForm").serialize();

    $.ajax({
        type: "POST",
        dataType: "jsonp",
        contentType: "application/json; charset=utf-8",
        url: "https://xyz.com",
        data: str,
        success: function (msg) {console.log("Success data post ---->" + JSON.stringify(msg)) },
        error: function (msg) { console.log("Error data post ---->" + JSON.stringify(msg)) }

    });
    //End Data Post to First Form

    //Call Click event of Second form .Use Form post and action method .

       //Copy First Form text box  value into second Form text box 
      $("#btnSecondForm").trigger('click'); 
   //End Click event


  return false;
}



//Form in Body

<form  id="FirstForm" onsubmit="return ValidateForm(this)">

 //text box HTML 

</form>


 <form id="SecondForm" style='display:none' action="https://abc.com" method="post">

 <input type="submit" value="Submit" id='btnSecondForm' />

 </form>
于 2014-03-18T10:32:49.967 回答
0

编写一个在参数中具有要发送到的 URL 的函数,然后只调用该函数 2 次,每次使用另一个 URL,而不是编写双重代码......

于 2012-09-30T00:31:43.823 回答