【发布时间】:2013-07-05 16:11:55
【问题描述】:
我刚刚开始尝试使用 Phonegap 将我的第一个且仍在开发中的 Web 应用程序转换为移动应用程序。我很困惑从服务器端页面生成到客户端页面生成,所以我开始做一些基本的东西作为测试存根,所以我实际上可以开始编写我的应用程序了。
我正在尝试将 AJAX 发布到 Ruby Sinatra Web 服务并在浏览器中接收响应。我无法让 Firefox 或 Chrome 走上成功之路。
这只是现在的测试,所以它没有做任何有用或合乎逻辑的事情。 Sinatra 路线如下所示:
post "/auth/check" do
status 200
content_type :json
{ :login => true }.to_json
end
html/javascript 看起来像这样:
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8" />
<link rel="stylesheet" type="text/css" href="css/index.css" />
<!-- <script src="js/lib/zepto.min.js"></script> -->
<script src="http://code.jquery.com/jquery-2.0.3.min.js"</script>
<script src="http://code.jquery.com/mobile/1.3.1/jquery.mobile-1.3.1.min.js"</script>
<script>
var BASEURL = "http://localhost:4567";
function login(){
debugger;
$.ajax({
dataType: "jsonp",
url: BASEURL + '/auth/check',
type: "POST",
data: { email: 'somedude@example.com',
password: 'e'
},
success: function (result) {
alert(result);
},
error: function(xhr, type){
alert('Y U NO WORK?')
}
});
}
</script>
</head>
<body>
<input type="button" onClick="login()">Click Me</input"
</body>
</html>
我无法让 Firefox 或 Chrome 执行任何操作,只能给出“Y U NO WORK?”警报。任何帮助将非常感激。我尝试从 Zepto.js 切换到 JQuery/JQuery mobile,我尝试将数据类型更改为 jsonp,使用 curl 我已经确认 Sinatra 路由正在返回一些东西和一个 200 状态代码,这就是 JQuery 应该是检查。
【问题讨论】:
-
似乎端口在每种情况下都不同。这足以使目标 URL 成为不同的来源。查找“同源策略”和“跨域资源共享”
-
感谢您的帮助 Jan,我进一步研究了跨源问题并通过为 jsonp 添加 gem 来让 Sinatra 工作。现在的问题是 javascript 总是创建一个 http get 而不是一个帖子,我尝试了两种类型:“POST”和方法:“POST”,但它似乎没有任何效果。
-
您无法通过 JSONP 发送 POST 请求。了解 JSONP 的工作原理。
-
谢谢 Jan,我想我必须修改我的项目才能使用 GET,这应该没什么大不了的。