javascript:json响应正常。使用var是错误的

javascript:json响应正常。使用var是错误的,javascript,android,json,cordova,Javascript,Android,Json,Cordova,情况是这样的。我在phonegap/jquerymobile中有一个应用程序。我想根据json数据更改页面 当用户启动应用程序但当前版本不是最新版本时,需要更改内容。这是start.html页面中的一段代码 <script type="text/javascript" charset="utf-8"> var versionValue = ServerSettings.versionCheck(); if(versionValue == true){ $("#login

情况是这样的。我在phonegap/jquerymobile中有一个应用程序。我想根据json数据更改页面

当用户启动应用程序但当前版本不是最新版本时,需要更改内容。这是start.html页面中的一段代码

<script type="text/javascript" charset="utf-8">
var versionValue = ServerSettings.versionCheck();
if(versionValue == true){   
    $("#loginPage").removeClass("hidden");
            $("#updatePage").addClass("hidden");    
}
else{
            $("#loginPage").addClass("hidden");
            $("#updatePage").removeClass("hidden");
}
</script>

我已经用toast验证了json调用的响应。它确实得到了正确的回答。(版本:0.9)我确信我犯了有史以来最愚蠢的错误,但我似乎找不到它

您正在尝试同步,但config参数的计算结果为true,因为它是一个字符串

async: "false"
将其更改为
async:false
,但我建议切换为异步以避免阻塞UI

另外,您的成功回调不会返回到外部方法,因此您将始终处于未定义状态

versionCheck : function() {
    var localAppVersion = 0.8;
    var response = false;
    $.ajax({
            // WARNING: I don't recommend setting this to false in production code
            // While the browser is waiting for the response the page/browser will not respond!!
            async: false,
            type: "GET",
            contentType: "application/json; charset=utf-8",
            dataType: "json",
            url: "http://xxx/service/version.php",
            success: function(jsonData) {
                var currentAppVersion = jsonData.version;
                response = localAppVersion == currentAppVersion;
            }                       
    });
    return response;
}
使其异步(推荐方法


Ajax是异步工作的,因此当您进行检查时,响应实际上还没有到达。将依赖于该值的逻辑放入ajax回调中

versionCheck : function() {
    var localAppVersion = 0.8;
    $.ajax({
            type: "GET",
            contentType: "application/json; charset=utf-8",
            dataType: "json",
            url: "http://xxx/service/version.php",
            success: function(jsonData) {
                var currentAppVersion = jsonData.version;

                if(localAppVersion == currentAppVersion){   
                    $("#loginPage").removeClass("hidden");
                    $("#updatePage").addClass("hidden");    
                }
                else {
                    $("#loginPage").addClass("hidden");
                    $("#updatePage").removeClass("hidden");
                }
            }                       
        });
    }

版本检查是一个异步调用。因此,它不会返回true或false。您的
versionValue
将不会为真或假。最好对异步调用使用承诺

像这样更改versionCheck函数

 versionCheck : function() {
            var localAppVersion = 0.8;
            var response = false;
            $.ajax({
                    async: "false",
                    type: "GET",
                    contentType: "application/json; charset=utf-8",
                    dataType: "json",
                    url: "http://xxx/service/version.php",
                    success: function(jsonData) {
                        var currentAppVersion = jsonData.version;
                            if(localAppVersion == currentAppVersion){
                                return true;
                            }
                            else{
                                return false;
                            }
                    }                       
            }).done(function(){
                 if(versionValue == true){   
                    $("#loginPage").removeClass("hidden");
                    $("#updatePage").addClass("hidden");    
                 }
                else{
                     $("#loginPage").addClass("hidden");
                     $("#updatePage").removeClass("hidden");
               }    
           });
        }

jQuery.promise
在1.6版中可用,这是因为您在使用异步时试图访问尚未从服务器返回的值

您可以重构您的版本检查以接受这样一个回调参数

<script type="text/javascript" charset="utf-8">

     var localAppVersion = 0.8,
         versionValue =false;
     var versionValue = ServerSettings.versionCheck(function(jsonData){

        var currentAppVersion = jsonData.version;
                    if(localAppVersion == currentAppVersion){
                        versionValue = true;
                    }
                    else{
                        versionValue = false;
                    }

        if(versionValue == true){   
           $("#loginPage").removeClass("hidden");
           $("#updatePage").addClass("hidden");    
        }else{
           $("#loginPage").addClass("hidden");
           $("#updatePage").removeClass("hidden");
     }
   });

那么哪个变量给出的值不正确呢?ServerSettings.versionCheck()始终未定义。
 versionCheck : function() {
            var localAppVersion = 0.8;
            var response = false;
            $.ajax({
                    async: "false",
                    type: "GET",
                    contentType: "application/json; charset=utf-8",
                    dataType: "json",
                    url: "http://xxx/service/version.php",
                    success: function(jsonData) {
                        var currentAppVersion = jsonData.version;
                            if(localAppVersion == currentAppVersion){
                                return true;
                            }
                            else{
                                return false;
                            }
                    }                       
            }).done(function(){
                 if(versionValue == true){   
                    $("#loginPage").removeClass("hidden");
                    $("#updatePage").addClass("hidden");    
                 }
                else{
                     $("#loginPage").addClass("hidden");
                     $("#updatePage").removeClass("hidden");
               }    
           });
        }
<script type="text/javascript" charset="utf-8">

     var localAppVersion = 0.8,
         versionValue =false;
     var versionValue = ServerSettings.versionCheck(function(jsonData){

        var currentAppVersion = jsonData.version;
                    if(localAppVersion == currentAppVersion){
                        versionValue = true;
                    }
                    else{
                        versionValue = false;
                    }

        if(versionValue == true){   
           $("#loginPage").removeClass("hidden");
           $("#updatePage").addClass("hidden");    
        }else{
           $("#loginPage").addClass("hidden");
           $("#updatePage").removeClass("hidden");
     }
   });
versionCheck : function(callback) {
    var localAppVersion = 0.8;
    var response = false;
    $.ajax({
            async: "false",
            type: "GET",
            contentType: "application/json; charset=utf-8",
            dataType: "json",
            url: "http://xxx/service/version.php",
            success: callback                
    });
}