jQuery PUT ajax请求无法工作。

4

我正在尝试将一个 Backbone 模型保存在 CouchDB 中,因此我已经重写了 save 方法,并使用 ajax 请求将其保存到 CouchDB:

  $.ajax({
    type: 'PUT',
    url: 'http://127.0.0.1:5984/movies/' + this.get('id'),
    contentType: 'application/json',
    data: JSON.stringify(this.toJSON()),
    success: function() {
      console.log('asdf');
    },
    failure: function() {
     console.log('test');
    }
  });

请求已发送,但当我查看couchdb日志时,发现jQuery似乎发送了一个OPTIONS HTTP方法而不是PUT

[info] [<0.1601.0>] 127.0.0.1 - - 'OPTIONS' /movies/862 405

couchdb发送了一个405 HTTP响应代码(不允许的方法)。有什么想法吗? 编辑以下是发送到CouchDB的标题:
OPTIONS /movies/862 HTTP/1.1
Host: 127.0.0.1:5984
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: en-us,en;q=0.5
Accept-Encoding: gzip, deflate
Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7
Keep-Alive: 115
Connection: keep-alive
Origin: http://localhost:8888
Access-Control-Request-Method: PUT
Access-Control-Request-Headers: content-type

这个“this”指向哪里? - Mohsen
骨干模型,但这与HTTP请求方法问题无关。 - errorhandler
哪个版本的jQuery?AJAX部分最近被完全重写了。 - Nick Craver
最新版本(今天下载) - errorhandler
你能展示一下你写的完整的自定义save方法吗?除了你发布的内容之外,还有其他的东西吗? - Andrew Hare
2个回答

2

0

并非所有浏览器都支持PUT方法。此外,您的数据属性应为"data"而不是"body"。


哪些浏览器?我已经在Firefox 4、Chrome 11和Safari 5上进行了测试。 - errorhandler
它为什么会默认使用一个很少使用的HTTP方法,而不是抛出错误? - errorhandler
这是一个跨站请求吗?您在浏览器中使用了该IP地址来查看页面吗?如果是这样,那么就可以解释为什么PUT被转移到访问控制方法参数并生成OPTIONS请求。 - David Fells
以及 CouchDB 的工作方式(我认为),它必须在不同的端口上运行。 - errorhandler
如果端口改变,那么它就是一个跨域请求。您需要在服务器响应中指定接受来源头。如果不使用JSONP,则在IE中无法正常工作。 - Julien
显示剩余2条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接