有没有办法在window.open
调用中指定HTTP方法(POST,DELETE,PUT)?
我知道我可以改为进行Ajax调用,并允许指定HTTP方法,但在这种情况下,我希望浏览器调用'for real'(跟随所有重定向,加载响应等)。< / p>
答案 0 :(得分:0)
我最终使用隐藏的表单来包装HTTP请求。该方法特定于我的后端(Rails),因为它使用hidden _method
input发布伪PUT或伪DELETE操作。使用Rails,我还必须添加hidden CSFR field。我原来的HTML如下:
<button class="btn action-button btn-danger"
id="delete-object"
data-action-href="<%= object_path(@object) %>"
data-action-method="delete"><i class="icon-trash icon-white"></i>Delete</button>
和实现它的CoffeeScript是:
$("button.action-button").each (index, element) ->
$(element).click (eventObject) ->
url = $(this).data("action-href")
httpMethod = $(this).data("action-method")
if httpMethod?
form = $("<form/>",
id: "action-method-temp-form"
action: url
method: "post"
style: "display: none")
form.appendTo $(this)
csfr = $('meta[name="csrf-token"]').attr("content")
$("<input/>",
type: "hidden"
name: "authenticity_token"
value: "#{csfr}").appendTo form
$("<input/>",
type: "hidden"
name: "_method"
value: httpMethod).appendTo form if httpMethod != "post"
form.submit()
else
window.location = url
我明白这不是我要求的,但它做同样的事情。相反,Ajax调用后跟文档内容替换将无法正确处理重定向和非html内容类型响应等。