我正在使用Cordova混合移动应用程序。我正在调用API来将数据加载到我的变量中并进行处理。以下是问题所在。
首先,我使用ajax调用API。在ajax调用之后,我检查jsonString是否为空,如果是,我重新加载页面以再次运行ajax调用。
$.ajax({
url: GetConfigUrl // working URL,
type: 'POST',
data: {
token: '123456'
},
cache: false,
datatype: 'json',
contenttype: "application/json",
success: function (data, response, xhr) {
debugger
jsonString = data.Value;
},
error: function (data) {
// do nothing
)
});
if (jsonString == '') {
// Display popup to ask user the reload the page
}
return true;
我在成功调用函数中有一个调试器,但它没有命中并直接检查jsonString是否为空,这是空的,因为它没有调用ajax加载数据并继续显示弹出窗口要求用户重新加载页面。
点击页面重新加载后,成功调用中的调试器被命中并能够检索该值。因此,jsonString不为空并且能够继续。
似乎是第一次通话,但始终保持待定状态。第二个调用是成功调用并返回正确的值。所以传递了jsonString检查。
此问题始终发生在第一个ajax调用未成功且处于挂起状态但所有后续调用都成功的情况下。
那么这里可能出现什么问题?如何确保第一次ajax调用成功并始终返回数据?
答案 0 :(得分:2)
Ajax以异步方式执行,将您的逻辑放在成功函数中,以便在ajax调用完成时执行
$.ajax({
url: GetConfigUrl // working URL,
type: 'POST',
data: {
token: '123456'
},
cache: false,
datatype: 'json',
contenttype: "application/json",
success: function (data, response, xhr) {
debugger
jsonString = data.Value;
if (jsonString == '') {
// Display popup to ask user the reload the page
}
},
error: function (data) {
// do nothing
)
});
return true;