【发布时间】:2012-02-29 08:51:49
【问题描述】:
我正在使用 PhoneGap 创建一个移动应用程序。如此有效地我正在用 jQuery Mobile、HTML 和 CSS 编写应用程序。
问题是:服务器是一个 REST 实现。这意味着要创建一个新的“实体”(例如用户、汽车、热宝贝),服务器会监听 POST 请求。如果服务器将通过返回现有的“实体”来响应 GET 请求。
如何让移动应用程序从 jQuery 发送 POST 请求?这听起来很简单,但请记住,即使您指定 POST,jQuery 也会将 jsonp 数据类型请求更改为 GET。另外请注意,服务器和应用不在同一个域,所以这个请求是跨域发送的,所以设置数据类型为json是行不通的。
我已经坚持了 4 个小时。如果我只关心 GET 请求,我可以在眨眼间让它工作,但到目前为止,在服务器上获取 POST 已被证明是不可能的。
这里是服务器端代码的简化:
class GatewayService extends Service[Request, Response] {
def apply(request: Request) = {
request.method -> Path(request.path) match {
case GET -> Root / "car" => {
println("---Get car---")
}
case POST -> Root / "car" => {
println("---New car---")
}
case _ => {
println("---Other method type ---")
}
}
}
这里是 jQuery 代码:
function serverRequest(formId, url) {
var result = ""
var formData = readFormData(formId);
console.log("Submitting form:\n"+JSON.stringify(formData));
$.ajax({
type:"POST",
url: url,
data: JSON.stringify(formData),
dataType: "json",
success: function(response){
alert(response['message']);
console.log("Received response: "+JSON.stringify(response));
result = response;
},
error: function(jqXHR, textStatus, errorThrown){
console.log(
"The following error occured: "+ jqXHR,
textStatus, errorThrown
);
},
complete: function(){
//Nothing here for now
}
});
return result;
}
如果您对使用 jQuery 获取跨域 POST 请求有任何想法,请分享您的秘密。
看来您不能简单地直接从基于 jQuery Mobile 开发的移动应用程序访问 REST 服务器。这是正确的吗?
【问题讨论】:
标签: jquery jquery-mobile cordova