我在数据库中有两个表,当按下提交按钮时我想将新交易者插入到交易者表中并使用laravel 5.2
通过在条件下使用post ajax获取id,然后执行另一个发布ajax的发票插入,但是在这种情况下的问题是当我按下提交时它在第一个ajax之前执行第二个ajax ..为什么?
$(document).ready(function(e) {
$('#invoiceForm').validate({
//rules: itemRules,
errorPlacement: function (element) {
return false;
},
submitHandler: function (event) {
//event.preventDefault();
// $('#selectedTraderName').valid();
var allItems = [];
$('tr.inputsItem').each(function () {
rowData = $(this).children('td').find('.form-control').map(function () {
return $(this).val();
}).get();
rowData.push(parseInt($(this).children('td').find('strong#autoTotal').text().trim()));
if($('select[id=selectedTraderName]').val() <= lastTraderID) {
rowData.push($('select[id=selectedTraderName]').val());
}
else{
newTrader = [];
newTrader.push($('#name').val());
newTrader.push($('#traderMail').val());
newTrader.push($('#mobileNumber').val());
newTrader.push($('#address').val());
$.ajax({
type: 'POST',
url: insertNewTrader,
data:{_token:token, trader:newTrader}
}).done(function (msg) {
rowData.push(msg['id']);
});
}
alert(rowData[6]);
allItems.push(rowData);
$.ajax({
type: 'POST',
url: insertNewItem,
data:{_token:token, items:allItems}
}).done(function () {
alert('done');
});
});
}
});
答案 0 :(得分:0)
检查第二个ajax请求条件并在第一个ajax功能完成部分/成功部分调用第二个ajax函数。
$.ajax({
type: 'POST',
url: insertNewItem,
data:{_token:token, items:allItems},
complete : function(){
//call ur 2nd ajax request here
},
success : function(data){
console.log(data);
//call ur 2nd ajax request here
}
});
答案 1 :(得分:0)
当然,由于if/else
语句,您无法嵌套ajax调用,而是可以像这样使用Deferred object
:
rowData.push(parseInt($(this).children('td').find('strong#autoTotal').text().trim()));
// Create a new Deferred object
var deferred = $.Deferred();
if ($('select[id=selectedTraderName]').val() <= lastTraderID) {
rowData.push($('select[id=selectedTraderName]').val());
//Nothing to wait just resolve the deferred
deferred.resolve();
} else {
newTrader = [];
newTrader.push($('#name').val());
newTrader.push($('#traderMail').val());
newTrader.push($('#mobileNumber').val());
newTrader.push($('#address').val());
$.ajax({
type: 'POST',
url: insertNewTrader,
data: {
_token: token,
trader: newTrader
}
}).done(function(msg) {
rowData.push(msg['id']);
//Resolve the deferred
deferred.resolve();
});
}
//When the deferred resolved then execute your next ajax request
deferred.then(function() {
allItems.push(rowData);
$.ajax({
type: 'POST',
url: insertNewItem,
data: {
_token: token,
items: allItems
}
}).done(function() {
alert('done');
});
});
我希望这会帮助你。