在Ajax完成之前不要开火

时间:2012-09-04 12:43:29

标签: jquery ajax mobile

我正在使用PhoneGap,JQuery

开发应用

我有2个标准的javascript函数。

LoadLanguage()将进行Ajax调用以获取语言文件,然后设置Javascript对象。

SetLanguage()将使用前一个对象(在LoadLanguage()中设置),然后使用正确的语言设置一些变量。

所以在我的js文件中我有这段代码:

function LoadLanguage()
{
    ....make ajax call and set up an object
}

function SetLanguage()
{
    ....set language based of previous LoadLanguage()
}

$( '#startpage' ).live( 'pagebeforecreate',function(event)
{
    LoadLanguage();
    ....
}

$( '#startpage' ).live( 'pagebeforeshow',function(event)
{
    SetLanguage();
    ....
}

问题是SetLanguage()会在LoadLanguage()完成之前触发。我可以在SetLanguage()内运行LoadLanguage ajax.complete来解决此问题。但这并不好,因为我需要在代码的其他部分调用SetLanguage()

那我该如何以一种好的方式解决这个问题呢?

5 个答案:

答案 0 :(得分:2)

一旦ajax请求完成并收到响应,您需要调用SetLanguage()函数。 如果您正在使用jquery,那么在LoadLanguage函数中您正在进行ajax请求

success: function(response)
{
    SetLanguage();
}

答案 1 :(得分:1)

您可以将ajax调用的async属性设置为false。这可能会有所帮助:How can I get jQuery to perform a synchronous, rather than asynchronous, Ajax request?

答案 2 :(得分:1)

你提议的方法对我来说似乎很好。你的问题 - 或者更准确地说,你的兴趣点似乎与语言无关。

据我了解,您认为从脚本的其他部分调用SetLanugage函数以及LoadLanguage函数之后存在问题。我根本没有看到任何问题。如果从脚本的其他部分调用SetLanguage是安全的,那么在加载语言之后,它的行为应该相同。

答案 3 :(得分:1)

您还可以在函数调用之外设置一个全局变量,只有在加载语言时才会变为true。然后在SetLanguage里面测试这个。

答案 4 :(得分:1)

如果你想锁定ajax调用,请使用此

if($.active){ 
  //there's an ajax function running
}else{ 
  //there's no ajax function running
}