【问题标题】:JQuery/Zepro $.ajax request always fails in Firefox/Chrome works in SafariJQuery/Zepro $.ajax 请求在 Firefox/Chrome 中总是失败在 Safari 中工作
【发布时间】: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,这应该没什么大不了的。

标签: json jquery


【解决方案1】:

根据 Jan Dvorak 的帮助,首先我需要 Sinatra 来实际返回 JSONP 数据。为 JSONP 支持添加 GEM:

require 'sinatra/jsonp'

其次路由只能是HTTP GET,使用JSONP函数返回一些东西:

get "/auth/check/" do
  content_type :json
  status 200
  @data = true
  JSONP @data
end

【讨论】:

    猜你喜欢
    • 2018-07-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-02-05
    • 2015-12-26
    • 2015-07-12
    相关资源
    最近更新 更多