【问题标题】:Retrieve html across domains using jQuery and JSONP使用 jQuery 和 JSONP 跨域检索 html
【发布时间】:2010-11-24 09:08:40
【问题描述】:

我有一个表单可以输出一行简单的 html <a href="link">A LINK</a>

我可以直接使用附加到 url 的数据来访问该过程,例如 http://site.com/form.asp?sample=100

因为这是跨域(到子域),所以我尝试使用 JSONP 来执行此操作。我第一次尝试使用数据类型 json,但我仍然得到 403 禁止。这是我正在尝试使用 JSONP 的方法,但这一切都搞砸了,并返回一个错误,并附加了这个 %5Bobject%20Object%5D"。我想这是我如何尝试将数据附加到网址?

$j.getJSON({
        type: 'POST',
        url: 'http://site.com/form.asp',
        data: 'order=' + ordervalue,
        contentType: "application/json; charset=utf-8",
        dataType: "jsonp",
        success: function(response) {
            alert(response);
        }
    });

【问题讨论】:

    标签: jquery ajax json jsonp


    【解决方案1】:

    JSONP 不是这样工作的,你根本不是在发送 JSON,而是在发送 HTML。

    JSONP 严格来说是一个 GET 请求(通过创建一个 <script> 标记发出),您不能跨域发布 并且 返回结果......它只是不能那样工作。 JSONP 的工作方式基本上是将其添加到您的页面:

    <script type="text/javascript" src="http://site.com/form.asp?order=something&callback=myFunc"></script>
    

    ....响应必须是有效的 JavaScript,通常看起来像:

    myFunc({ "key": "value"...data, etc... });
    

    它不能用于获取 HTML,它只是抛出一个语法错误,这个限制是非常故意的,并且部分安全块到位(same origin policy 的一部分)。

    【讨论】:

    • 感谢尼克的解释。我确实将类型设置为“GET”,但遇到了同样的问题,所以我想我会尝试发布。您是否有关于如何获取从具有跨域属性的 url 打印的 html 的建议?我很接近使用 json,但得到了 403,我不知道我是否非常接近 jsonp。
    • @zac - 如果要获取 HTML,则必须通过自己的域代理请求,只能跨域获取 JavaScript
    • 我们能以某种方式在返回的 JSON 中以编码格式发送标签吗?
    【解决方案2】:

    您仍然可以在客户端发布/获取跨域:

    flyJSONP/YQL
    jankyPOST/postMessage/contentWindow
    CORS

    【讨论】:

      猜你喜欢
      • 2013-10-23
      • 2013-01-04
      • 2013-04-04
      • 1970-01-01
      • 2011-07-25
      • 2014-05-13
      • 1970-01-01
      • 2013-11-25
      • 2015-03-23
      相关资源
      最近更新 更多