我目前正在使用jQuery mobile开发一个Web应用程序。但是,我发现当一个" changePage"失败了,我再也无法发送ajax请求了。失败后,所有ajax请求都会返回错误。这是单击表单上的提交按钮时执行的代码(它是一个基本的用户登录屏幕):
// Event when user click the Submit login button
$('#submitLogin').on("click", function () {
// submit the user credentials to the server
$.ajax({
type: "POST",
url: "./LogUser",
data: {
EmployeeID: $('#EmployeeID').val(),
EmployeePIN: $('#EmployeePIN').val()
},
dataType: "text",
async: true,
cache: false,
error: function (rqst, text, thrownError) {
$('#dlg-login-error-message').text(thrownError);
$('#dlg-login-error-popup').popup("open");
},
success: function (data) {
if (data == "Success") {
$.mobile.changePage("./LoadScreen/Menu");
}
else {
$('#dlg-login-error-message').text(data);
$('#dlg-login-error-popup').popup("open");
}
}
});
return false;
});
如果帖子本身失败,我可以毫无问题地重新提交。如果.mobile.changePage失败,则找不到"页面"显示,但我无法重新提交,ajax不再向服务器发出请求并直接跳转到错误回调,其中包含"未找到"错误。
我猜这个问题来自于jQuery mobile使用AJAX请求加载页面的事实,并且不知何故,ajax调用在某处混淆了。
我做了更多测试,甚至截获了pageloadfailed事件,但没有任何效果。页面更改失败后,AJAX调用不再向服务器发送任何内容并自动跳转到错误回调函数。
我尝试使用async = false,同样的问题。我试过调试jQuery-mobile,但我仍然无法找到" changePage"函数本身(.code非常混乱)。
我花了最近两天的时间试图找到解决这个问题的方法,并且我正在认真考虑使用除jQuery-mobile之外的其他东西进行开发。
答案 0 :(得分:0)
我找到了解决问题的方法,但我还不知道这个解决方案的全部影响。
为防止出现此问题,我必须将“pushStateEnabled”配置选项设置为“false”。
因此,如果您发现自己遇到同样的问题,请在加载“jQuery-mobile”脚本之前尝试将以下内容放入脚本中。
$(document).bind("mobileinit", function () {
$.mobile.pushStateEnabled = false;
});
示例:
<!-- Load the script for jQuery -->
<script src="~/Scripts/jquery-2.1.4.js"></script>
<!-- Set default for jQuery-Mobile, before it is actually loaded -->
<script>
$(document).bind("mobileinit", function () {
$.mobile.pushStateEnabled = false;
});
</script>
<!-- Load the script for jQuery-Mobile -->
<script src="~/Scripts/jquery.mobile-1.4.5.js"></script>