Cordova Android emulator应用程序未调用RESTful php服务器的http POST方法?
我正在Ubuntu 14上使用cordova开发android应用程序。它是一款混合应用程序,包括:- 服务器-使用Php和slim框架的RESTful api&Cordova Android emulator应用程序未调用RESTful php服务器的http POST方法?,android,cordova,phonegap-build,hybrid-mobile-app,Android,Cordova,Phonegap Build,Hybrid Mobile App,我正在Ubuntu 14上使用cordova开发android应用程序。它是一款混合应用程序,包括:- 服务器-使用Php和slim框架的RESTful api& 客户端-主干网,带有requirejs、jquery、bootstrap等、HTML、CSS 我已经按照Apache Cordova Documentation guide()中给出的步骤创建了该应用程序,并在android studio中导入了该应用程序。我正在使用android studio 1.3 我已使用(10.0.2.2)将
客户端-主干网,带有requirejs、jquery、bootstrap等、HTML、CSS 我已经按照Apache Cordova Documentation guide()中给出的步骤创建了该应用程序,并在android studio中导入了该应用程序。我正在使用android studio 1.3 我已使用(10.0.2.2)将应用程序连接到本地主机,该应用程序在模拟器上运行,并显示“登录”屏幕 问题是,在填写用户名和密码后,当我单击“登录”时,它会像在浏览器应用程序中一样触发http“POST”。但是它不会触发POST,作为回报,我在Backbone.sync-error中得到404错误,当我看到服务器HTTP_方法时,它显示“get” 我已重写Backbone.sync方法 这是我触发事件的'login.js'文件
//sigin button click code ...
// ...
signinInfo.set({
email: email,
password: password
});
signinInfo.save(null,{
success: function (data) {
window.localStorage.setItem('uid',signinInfo.attributes.uid);
window.localStorage.setItem('email_id',signinInfo.attributes.email_id);
// redirect the user to the given route
if (data.attributes.status == "1") {
window.location.href = "";
} else {
alert("Incorrect password!");
}
} // success
});
上述“signinInfo”模型上的“save”会触发Backbone.sync方法。下面是models.js中覆盖“Backbone.sync”方法的代码片段:
originalSync = Backbone.sync;
Backbone.sync = function (method, model, options) {
var success = options.success;
var error = options.error;
console.log("Models.js- method: " + method + ", model: " + JSON.stringify(model) + ", options: " + JSON.stringify(options));
options.success = function (model, response, options) {
console.log("Models.js- success, response: " +response );
$('.srLoading').hide();
if (typeof model.redirect == 'undefined') {
success(model, response, options);
} else {
window.location.replace("/");
}
};
options.error = function (model, response, options) {
console.log("Models.js- error:" +JSON.stringify(model) + " response: " + response + "; options: " + JSON.stringify(options));
$('.srLoading').hide();
error(model, response, options);
};
// I have tried to put options for crossDomain here, but its not working
options = options || (options = {});
if (!options.crossDomain) {
options.crossDomain = true;
}
if (!options.xhrFields) {
options.xhrFields = {withCredentials:true};
}
if (method === "read") {
console.log("Models.js- read method!" );
$('.srLoading').show();
options.dataType = "jsonp";
return originalSync.apply(Backbone, arguments);
}
if (method === "create") {
console.log("Models.js- create method!" );
$('.srLoading').show();
options.dataType = "jsonp";
options.contentType = 'application/json';
options.type = 'POST';
//options.data = JSON.stringify(options.data);
return originalSync.apply(Backbone, arguments);
}
if (method === "update") {
$('.srLoading').show();
options.dataType = "jsonp";
return originalSync.apply(Backbone, arguments);
}
if (method === "delete") {
$('.srLoading').show();
options.dataType = "jsonp";
return originalSync.apply(Backbone, arguments);
}
}; //Backbone.sync
上面,调用了方法“create”,但在服务器上它不会转换为“POST”请求。相反,$\u服务器['REQUEST\u METHOD']显示'GET'!:(在我的Backbone.sync方法中,我对[options.dataType=“jsonp”]进行了注释,因此代码如下所示:
...
if (method === "create") {
console.log("Models.js- create method!" );
$('.srLoading').show();
//options.dataType = "jsonp";
options.contentType = 'application/json';
return originalSync.apply(Backbone, arguments);
}
现在我的登录向服务器发送HTTP POST请求
在跨域(CORS)上,数据类型为“jsonp”的主干只能发出“GET”请求。因此,要执行其他操作,我们需要发送“json”数据。发布应该发出请求的代码片段。