1

我正在使用 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()我的代码的其他部分。

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

4

5 回答 5

2

ajax 请求完成并收到响应后,您需要调用 SetLanguage() 函数。如果您使用的是 jquery,那么在您发出 ajax 请求的 LoadLanguage 函数中

success: function(response)
{
    SetLanguage();
}
于 2012-09-04T12:48:32.010 回答
1

您可以将 ajax 调用的异步属性设置为 false。这可能会有所帮助:如何让 jQuery 执行同步而不是异步的 Ajax 请求?

于 2012-09-04T12:48:26.830 回答
1

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

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

于 2012-09-04T12:49:39.283 回答
1

您还可以在函数调用之外设置一个全局变量,该变量只有在加载语言时才会变为真。然后在 SetLanguage 中对此进行测试。

于 2012-09-04T12:50:07.593 回答
1

如果你想锁定 ajax 调用使用这个

if($.active){ 
  //there's an ajax function running
}else{ 
  //there's no ajax function running
} 
于 2012-09-04T12:50:27.620 回答