如何将HTTP方法传递给window.open

时间:2013-01-28 09:37:25

标签: javascript jquery http

有没有办法在window.open调用中指定HTTP方法(POST,DELETE,PUT)?

我知道我可以改为进行Ajax调用,并允许指定HTTP方法,但在这种情况下,我希望浏览器调用'for real'(跟随所有重定向,加载响应等)。< / p>

1 个答案:

答案 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内容类型响应等。