我在变更事件上调用了两个函数。
function1();
function2();
function1()
:是一个ajax呼叫
function2()
:在function1()之前执行。
为什么会这样?
任何帮助?
答案 0 :(得分:3)
Ajax
的第一个A表示asynchronous
,即常规Javascript程序流将在Ajax请求仍在处理时继续。因此,function2
将在从function1
启动的Ajax请求完成之前执行。
解决方案:Javascript中的每个异步方法都会为您提供一个所谓的callback
,这是一个在异步方法完成后调用的函数。在jQuery.ajax()
中,此回调随参数success
一起提供。如果您将此呼叫置于此function2
内,则可以正常使用。
function1() {
...
$.ajax({
url: '...',
type: 'GET',
success: function(data) {
// this will be executed after the asynchronous method finishes
function2();
}
});
}
答案 1 :(得分:1)
Please look at the code written below:
function1() {
$.ajax({
url: myurl,
type: 'GET',
async:false,
success: function(response) {
function2();
}
});
}
请注意,“async:false”将确保成功方法在成功执行第一个函数时调用。所以你应该使用“async:false”来确保function2()在function1()之后调用。
答案 2 :(得分:0)
如果function1()
是ajax函数,则在ajax成功时调用function2()
如果您使用的是jquery ajax
function1() {
$.ajax({
url: myurl,
type: 'GET',
success: function(response) {
function2();
}
});
}
答案 3 :(得分:0)
在Ajax成功响应后调用你的function2。
function function1()
{
//Ajax Call
..
..
if (xmlhttp.readyState==4 && xmlhttp.status==200)
{
function2();
}
}
答案 4 :(得分:0)
通常像这样打电话
function1(function() {
function2();
});
如果是这样的Ajax调用
function function1() {
$.ajax({
url: "url",
type: 'POST',
}).success(function (html) {
function2();
});
}
答案 5 :(得分:0)
jQuery ajax返回延迟对象(http://api.jquery.com/category/deferred-object/),它对你这样的东西非常有用。顺便说一句,延迟对象支持链接模式,这样就可以调用多个函数。
所以,要一个接一个地运行一个函数,你可以做下一个
function ajaxCall(){
return $.get('your/api/call', {param:1});
}
function fun1(){
console.log('Function 1 was called');
}
function fun2(){
console.log('Function 2 was called');
}
ajaxCall().done(fun1).done(fun2);
或者您可以使用$ .when
$.when( $.get('your/api/call') )
.then(function(){ alert(1); })
.then(function(){ alert(2); });
有用的链接: