我正在开发一个PhoneGap应用程序与jQuery Mobile 1.3.1& jQuery
JavaScript Library v1.9.1.我有一个用户名和密码的登录表单.有一个JSON api可以发送和接收JSON数据来处理登录.
我使用以下JavaScript进行ajax登录.
$('#submit').bind('click',function(e) { e.preventDefault(); $.ajax({ type : "POST",url : "http://domainx/public/login",xhrFields : {withCredentials: true},crossDomain: true,beforeSend : function() {$.mobile.showPageLoadingMsg();},complete : function() {$.mobile.hidePageLoadingMsg();},data : {username : 'subin',password : 'passwordx'},dataType : 'json',success : function(response) { console.error(JSON.stringify(response)); },error : function() { console.error("error"); } }); });
<div data-role="content"> <form id="login-form" data-ajax="false" method="post"> <fieldset> <input type="text" name="username" id="username" value="subin" placeholder="Username"> <input type="password" name="password" id="password" value="passwordx" placeholder="Password"> <input type="button" data-theme="b" name="submit" id="submit" value="Enter" data-icon="plus"> </fieldset> </form> </div>
解决方法
你有几个错误是你的代码:
>将日期更改为数据
data : {username : 'subin',
>删除此行,它将阻止Phonegap成功发布:
xhrFields : {withCredentials: true},
>在你的beforeSend并完成使用这个功能来显示加载器:
$.mobile.loading('show');
和
$.mobile.loading('hide');
您当前的这些在jQuery 1.2中已被弃用.
您的最终代码应如下所示:
$.ajax({ type : "POST",url : "http://domain/public/login",beforeSend : function() {$.mobile.loading('show')},complete : function() {$.mobile.loading('hide')},success : function(response) { //console.error(JSON.stringify(response)); alert('Works!'); },error : function() { //console.error("error"); alert('Now working!'); } });
证明它正在工作,只是从磁盘运行,而不是从服务器,因为你会得到一个CROSS域错误:
<!DOCTYPE html> <html> <head> <title>jQM Complex Demo</title> <Meta http-equiv='Content-Type' content='text/html; charset=utf-8'/> <Meta name="viewport" content="width=device-width; initial-scale=1.0; maximum-scale=1.0; minimum-scale=1.0; user-scalable=no; target-densityDpi=device-dpi"/> <link rel="stylesheet" href="http://code.jquery.com/mobile/1.3.1/jquery.mobile-1.3.1.min.css" /> <script src="http://code.jquery.com/jquery-1.9.1.min.js"></script> <script src="http://code.jquery.com/mobile/1.3.1/jquery.mobile-1.3.1.min.js"></script> <script> $.ajax({ type : "POST",success : function(response) { //console.error(JSON.stringify(response)); alert('Works!'); },error : function() { //console.error("error"); alert('Not working!'); } }); </script> </head> <body> <div data-role="page" id="index"> <div data-theme="b" data-role="header"> <h1>Index page</h1> </div> <div data-role="content"> </div> </div> </body> </html>