我试图在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){}
})
}
})
还有其他办法吗?
thx
答案 0 :(得分: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){}
});
}
});
应该跳出来的第一件事就是重复的数量。你基本上有两个非常相似的代码块。除非有一个非常好的理由为什么它应该被复制(例如,如果两个代码块对两个不同的业务所有者/角色负责并且非常可能彼此独立地改变),那么抽象将重复的代码转换为单个函数。
在这种情况下,两个重复的代码块之间只有两个不同之处:
因此,从重复代码中提取的函数应该接受这两个参数:
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调用的结果?或者您希望它是传递给包含内部AJAX调用的函数的data
参数吗?目的在代码中不清楚。
答案 1 :(得分:0)
编写一个具有要在参数中发送的URL的函数,然后每次使用另一个URL调用该函数2次,而不是写入双重代码...
答案 2 :(得分: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
});
};
答案 3 :(得分: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>