我正在使用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()
。
那我该如何以一种好的方式解决这个问题呢?
答案 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
}