javascript:json响应正常。使用var是错误的
情况是这样的。我在phonegap/jquerymobile中有一个应用程序。我想根据json数据更改页面 当用户启动应用程序但当前版本不是最新版本时,需要更改内容。这是start.html页面中的一段代码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
<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
});
}