【问题标题】:* method working normall but not with jQuery ajax* 方法正常工作但不能使用 jQuery ajax
【发布时间】:2013-09-19 05:35:39
【问题描述】:

所以,我正在设置一个 RESTful API,一切似乎都很好。

它可以通过邮递员成功地向本地服务器发出PUT请求:

Status Code: 200 OK
Access-Control-Allow-Methods: GET, POST, PUT, LOGIN, OPTIONS
Access-Control-Allow-Origin: *
Cache-Control: no-store, no-cache, must-revalidate, post-check=0, pre-check=0
Connection: Keep-Alive
Content-Length: 299
Content-Type: application/json
Date: Sat, 14 Sep 2013 17:56:28 GMT
Expires: Thu, 19 Nov 1981 08:52:00 GMT
Keep-Alive: timeout=5, max=100
Pragma: no-cache
Server: Apache/2.2.25 (Win32) PHP/5.3.19
X-Powered-By: PHP/5.3.19

但是当使用带有以下代码的ajax时:

    $.ajax({
        url: SD.AJAX+'users?uname=jamie&pword=jamie',
        dataType: 'json',
        type: 'login',
        data: {
            'uname':'jamie',
            'pword':'jamie'
        },
        crossDomain: true
    });

我收到以下错误:

OPTIONS http://sexdiaires.local/users?uname=jamie&pword=jamie 405 (Method Not Allowed) jquery.js:8526
OPTIONS http://sexdiaires.local/users?uname=jamie&pword=jamie Method LOGIN is not allowed by Access-Control-Allow-Methods. jquery.js:8526
XMLHttpRequest cannot load http://sexdiaires.local/users?uname=jamie&pword=jamie. Method LOGIN is not allowed by Access-Control-Allow-Methods. 

为什么,使用 ajax 会有什么不同,尽管我必须承认收到的标头由于某种原因是不同的:/

HTTP/1.1 405 Method Not Allowed
Date: Sat, 14 Sep 2013 18:00:38 GMT
Server: Apache/2.2.25 (Win32) PHP/5.3.19
X-Powered-By: PHP/5.3.19
Set-Cookie: PHPSESSID=36an511ifo3jsu6uh6a1fqoc82; path=/
Expires: Thu, 19 Nov 1981 08:52:00 GMT
Cache-Control: no-store, no-cache, must-revalidate, post-check=0, pre-check=0
Pragma: no-cache
Access-Control-Allow-Origin: http://sd.local
Content-Length: 3562
Keep-Alive: timeout=5, max=100
Connection: Keep-Alive
Content-Type: text/html

【问题讨论】:

  • 因为您没有指定要执行 put 请求。如果你不告诉它要做什么类型的请求(默认是 get),jQuery 就无法知道时间。 read the manual 了解如何执行 put 请求。
  • 是的,我不是故意在标题中写 PUT,它只是每个人都会知道的。在这种情况下,我实际上想使用 LOGIN 作为方法。

标签: javascript jquery ajax rest http-headers


【解决方案1】:

这是因为 type: 'login' 不是有效的 HTTP 方法。

来自jQuery's doc

type (default: 'GET') Type: String 要发出的请求的类型 ("POST" 或“GET”),默认为“GET”。注意:其他HTTP请求方式,如 PUT 和 DELETE,这里也可以使用,但不支持 所有浏览器。

您是否尝试过使用type: 'PUT'

【讨论】:

  • 我会试一试,但是 PATCH, COPY, PURGE 怎么样?仅举几例?
猜你喜欢
  • 1970-01-01
  • 2021-06-13
  • 2017-01-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-03-16
  • 2011-01-20
  • 1970-01-01
相关资源
最近更新 更多