【问题标题】:"jquery.jsonp.js" GET works. What about POST PUT DELETE OPTIONS?“jquery.jsonp.js” GET 工作。 POST PUT DELETE 选项呢?
【发布时间】:2013-05-17 01:14:27
【问题描述】:

GET 以外的 jsonp http 方法(POST、PUT、OPTIONS、DELETE)

使用jquery内置的$.ajax方法是这样的

$(document).ready(function() {
    $.ajax({
    type: "GET",
    url: "http://myurl.com/webservice&callback=?",
    ...
});

只想关注type: "GET",这一行 使用 $.ajax 执行 http PUT 只需更改 type: "PUT",

此代码示例来自JSON parsing from cross domain using jquery ajax

不使用 $.ajax

使用 google-code 的 jquery.jsonp https://github.com/jaubourg/jquery-jsonp

这里是一个使用 GET 方法的 jquery.jsonp.js 示例

$.jsonp({
    cache: false,
    url: 'http://www.mydomain.com/logicalurl/2/',
    callbackParameter: 'callback',
    timeout: 10000,
    success: function(json, textStatus, xOptions) {
        myglob = json;
        MyModulePatternObject.initNew(json);
    },
    error: function (xOptions, textStatus) {
    console.log("fail");
    }
});

这非常有效。如何做一个 GET jsonp 请求不是我的问题。

在 $.jsonp 中,想要执行其他 http 方法:PUT POST DELETE OPTIONS ... ? $.jsonp 是否支持type="PUT",

文档中根本没有提及:API.md 和 TipsAndTricks.md 源代码中也没有。

更新

@ohgodwhy 有一个 hack (iframes / Proxy) 可以让 POST 2 跨域工作。 Using PUT/POST/DELETE with JSONP and jQuery

@thefrontender 链接文章建议研究“跨源资源共享 (CORS)”

浏览器支持CORS http://caniuse.com/cors

同一篇文章还说,“您可以将 JSON 编码为 URL 参数,但您竟然这么想也感到羞耻。”在整个历史中,羞耻从未阻止过任何人?简单、懒惰且在有限的情况下可以完成工作。

感谢 4 位大家的帮助...

【问题讨论】:

  • "$.jsonp 是否支持 type="PUT",?" 没有。
  • 谢谢大家。 json-p 已经不再使用了吗?
  • 是的,JSONP 仍然被广泛使用。

标签: jquery jsonp google-code http-put http-method


【解决方案1】:

JSON-P 通过将脚本标签注入到您的文档中来工作:它不是传统的 XHR 请求。

所以你通常只能执行 GET 请求。您不能执行 PUT 请求。

本文中的更多详细信息:http://johnnywey.wordpress.com/2012/05/20/jsonp-how-does-it-work/

【讨论】:

  • 其实那是错的。这是可能的,虽然不是最简单的。 Please see this detailed post here, it's amazing.
  • @Ohgodwhy 这是一个非常聪明的 hack ......但它是一个 hack,没有内置到正在使用的库中,并且不适用于 PUT(这个问题专门询问)
  • 我会争辩说链接帖子中的方法根本不使用 JSONP,这并不能真正帮助争论 jsonp 可以作为 GET 以外的任何东西完成(除非您认为使用 jsonp 样式响应的 xhr 的同源请求是真正的 jsonp 请求)。这是一个聪明的技巧,但它不是 jsonp。这只是规避同源策略的另一种方式。这个答案是正确的。
  • @KevinB 我倾向于同意你的观点,但有些人认为 JSON-P 是一种有效负载格式,而不是一种通信方法。这将我们带入了滑溜溜的语义斜坡领域,这在这个问题的范围内并不是特别有用。
  • @Ohgodwhy 和这些人的答案都值得一试。 stackoverflow.com/a/14145058/2255936 不要介意巧妙的技巧,只要它们有效并且大多数浏览器都支持(IE 除外)
猜你喜欢
  • 2015-01-17
  • 1970-01-01
  • 2014-03-14
  • 2015-01-25
  • 2020-08-23
  • 1970-01-01
  • 2021-11-19
相关资源
最近更新 更多