【问题标题】:jQuery 1.5 only sends GET requests in ajax methodjQuery 1.5 仅在 ajax 方法中发送 GET 请求
【发布时间】:2011-02-05 19:31:12
【问题描述】:

我正在尝试向 RESTful Web 服务发出 PUT 请求,但是,jQuery 1.5 似乎确实响应了“类型”设置中的任何更改。无论“类型”中的值如何,请求都作为 GET 发送。在 jQuery 1.4 中这不是问题。

这是我的代码:

$.ajax({
    type: "PUT",
    url: "https://api.somesite.com/v1.0/people/" + individualID + "/",
    dataType: "jsonp",
    data: $("#editProfile").serializeArray(),
    cache: "false",
    success: function(data,textStatus,jqXHR) {
        $.modal.close();
    },
    error: function(jqXHR,textStatus,errorThrown) {
        alert("Error!");
    }
});

【问题讨论】:

  • 您实际上并没有提出问题,而是提交了错误报告。
  • 在 Safari 和 Firefox 中都试过
  • 您不能通过GET 以外的任何方式发出 JSONP 请求,因为它根本不是 AJAX 请求。 AJAX 请求只能向您自己的域发出。 JSONP 通过创建<script> 标签来伪造它。戴夫首先得到了正确的答案。

标签: javascript jquery rest xmlhttprequest


【解决方案1】:

据我所知,您无法通过 PUT 发出 JSONP 请求。由于 JSONP 通过注入指向远程域的 <script> 元素来工作,因此该请求将始终是 GET 请求。

如果您绝对必须向远程域发出 PUT 请求,则需要在本地域上使用服务器端代理,或者如果您不需要 IE 支持,请查看 CORS。

【讨论】:

  • 当我从请求中删除“dataType: jsonp”设置时,浏览器实际上确实向远程域发出了 PUT 请求。
  • 它正在使用 CORS。 IE 上的 CORS 在很大程度上已损坏,如果 @Dave 是正确的并且您无法更改方法,我不会感到惊讶。
【解决方案2】:

来自jQuery.ajax() docs

要发出的请求类型(“POST”或 “GET”),默认为“GET”。注:其他 HTTP 请求方法,例如 PUT 和 DELETE,这里也可以用,但是 并非所有人都支持 浏览器。

也许通过一些额外的浏览器信息,我们可以找出导致问题的原因,但目前看来,jQuery 似乎不想保证除了 GET 和 POST 之外的功能。这让我很惊讶=)

【讨论】:

    【解决方案3】:

    How do I PUT data to Rails using JQuery 可能吗?

    编辑:哎呀,你没有说 web 服务在 Rails 中。但它也可能支持类似的东西。您是否尝试仅发送 POST 请求?

    【讨论】:

      【解决方案4】:

      我正在为类似的事情而苦苦挣扎。我已经能够在 1.5 之前成功发送 PUT,但停止使用 1.5。我知道在 1.5 中处理 ajax 的方式发生了很大的变化,所以接下来我会研究一下。 当它确实有效时,它在 safari、firefox 和 chrome 中对我来说效果很好。当它起作用时,您将首先收到一个 OPTIONS 被发送,并且正如在您的服务器端必须对 OPTIONS 请求 a la CORS 做出令人满意的响应之前所指出的那样。这是一个 ot 测试代码,它在 1.5 之前对我有用,所以它是可能的。顺便说一句,我无法让 Firefox 缓存 OPTIONS 响应客户端。其他浏览器可以。

      http://ajax.googleapis.com/ajax/libs/jquery/1.4/jquery.min.js" 
      
      var url = 'http://api.example.com/rest/action?key=123ABC&data={"value":55}';
      $.ajax({
        type: "PUT",
        url: url,
        data: {},
        success: function(msg){
          alert( "Data Saved: " + msg );
        },
        error: function(msg){
           console.debug(msg);
        }
      });
      

      【讨论】:

        猜你喜欢
        • 2015-09-07
        • 2017-04-09
        • 2020-12-07
        • 1970-01-01
        • 1970-01-01
        • 2021-06-20
        • 1970-01-01
        • 2011-07-12
        • 1970-01-01
        相关资源
        最近更新 更多