我有两种基于Ajax的方法,每10秒执行一次。但是我还有另一件事是表单提交。现在,当我提交表单进行处理时,它将等待先前触发的ajax调用完成然后进行处理。我想优先考虑。
以下我有脚本
function refresh_ss_one(){
$.ajax({
type: 'GET',
url: "{{ route('RefreshSessionOne') }}",
data: {},
success: function(response){
console.log(response);
}
});
}
function refresh_ss_two(){
$.ajax({
type: 'GET',
url: "{{ route('RefreshSessionTwo') }}",
data: {},
success: function(response){
console.log(response);
}
});
}
setInterval(refresh_ss_one, 10000);
setInterval(refresh_ss_two, 10000);
我还有一个正在执行表单提交事件,我想对其进行优先排序。我已经遍历了async
ajax参数并在我的ajax函数中使用过,但仍然遇到问题。
$("#check-rate").submit(function(e) {
var form_data = $(this);
$.ajax({
type: 'POST',
url: currency_route,
data: form_data.serialize(),
success: function(response)
{
...
}
});
e.preventDefault();
});
有人可以指导我如何解决此问题。.
答案 0 :(得分:0)
您可以通过以下方式尝试:
<script>
// write your ajax function like
$.ajax({
type: 'GET',
url: "{{ route('RefreshSessionOne') }}",
data: {},
async: false,
success: function(response) {
console.log(response);
}
});
//首先完成此请求,然后输入其他代码
$.ajax({
type: 'GET',
url: "{{ route('RefreshSessionTwo') }}",
data: {},
success: function(response) {
console.log(response);
}
});
//在上一个async:false请求完成后执行。
默认情况下,jquery中的$ .ajax请求设置为异步。变量名是async,并且值设置为true。
或者您可以在第一个函数的成功部分中调用第二个函数。
答案 1 :(得分:0)
我会尝试更现代的方法。遵守诺言:
var promise1 = new Promise(function(resolve, reject) {
//first ajax call here
});
promise1.then((value) => {
//second ajax call here
});
promise所要做的就是确保运行代码的第一部分(您的第一个ajax调用在这里,您可以设置成功执行ajax调用的resolve,然后它将运行第二个代码。
P.S。您可以根据需要拥有任意数量的
。答案 2 :(得分:0)
要顺序从GET / POST请求列表中获取响应,以下是使用jQuery Deferreds解决问题的方法
const $ajaxSeq = arr => $.when.apply($, arr.map(data => $.ajax(data))).then(function(_res){
return Array.isArray(_res) ? [].map.call(arguments, res => res[0]) : [_res];
});
用法如下:
$ajaxSeq([
{type:'POST', url:'some_url_here', data: {content: "Hello world"}},
{type:'GET', url:'some_url_here'},
{type:'GET', url:'some_url_here'},
]).then( res => {
// Once all requests are fulfilled
// access the desired response in order:
console.log(res[0])
console.log(res[1])
console.log(res[2])
});
答案 3 :(得分:-1)
AJAX调用可以做到。它使请求异步。因此,根据定义,一个请求不会等待另一个请求完成。您可以像上面@jayoti所说的那样将其设置为async:false。不仅如此,您还应该有一个方法方法来调用其他2个方法,并且在收到响应时可以调用第二个方法。