$.ajax 删除请求未在 capybara-webkit 中发送数据参数

Posted

技术标签:

【中文标题】$.ajax 删除请求未在 capybara-webkit 中发送数据参数【英文标题】:$.ajax delete request not sending data parameters in capybara-webkit 【发布时间】:2013-04-09 06:42:26 【问题描述】:

我发现当我通过 capybara-webkit 执行 ajax DELETE 请求时,它们没有向控制器发送数据参数。但是,当我使用 selenium 运行测试套件时,确实会发送数据参数(并且测试通过)。我的代码如下所示:

$(document).on 'click', 'a.delete_contact', ->
  if confirm "Are you sure you want to delete this contact?"
    id = $('a.delete_contact').data('id')
    name = $('a.delete_contact').data('name')
    $.ajax '/contacts',
      type: 'DELETE'
      dataType: 'html'
      data: 'id' : id
      success: ->
        $("li[data-cid='#id']").remove()
        removeInitial(_.last(name.split(" "))[0])
        show_notice("Contact successfully destroyed.", 'notice')
        window.contactSelection.pop()        
        refreshSelectionView()
  return false

知道为什么这在 capybara-webkit 中失败了吗?

【问题讨论】:

我不确定这个问题的解决方法,但似乎 capybara-webkit 没有模仿 http 动词的能力。 See the discussion here. @JasonKim 我相信讨论是关于允许从您的 Ruby 代码向服务器发出任意请求。这是“浏览器”(由 capybara-webkit 模拟)不通过请求正文发送的问题,除非 HTTP 方法是 PUT 或 POST。虽然我正在尝试使用 PATCH 方法,但我遇到了同样的问题。 【参考方案1】:

显然 QtWebKit 不支持带有 DELETE 请求的实体主体。

https://github.com/thoughtbot/capybara-webkit/issues/427#issuecomment-12200262

一位 capybara-webkit 开发人员推荐了这种解决方法:“[Send] 一个 POST 请求,其参数将请求标识为 DELETE。Rails 使用这种机制来解决跨浏览器的类似问题。”

【讨论】:

以上是关于$.ajax 删除请求未在 capybara-webkit 中发送数据参数的主要内容,如果未能解决你的问题,请参考以下文章

Ajax 发布返回成功但在调试时未在 VS 中达到断点

CORS cookie 未在 Chrome 中发送

ajax 响应未在单击的超链接的父 div 中呈现

显示键盘时未在移动设备中触发提交事件

Ajax基本使用基于Ajax请求的二次删除确认

Ajax 删除请求返回 200 但触发错误