pjax提交表单URL重定向


pjax submit form URL redirection

PJAX的文档指出Github在提交Gist表单时使用$.pjax.submit()。Github很好地实现了ajax表单提交的一个期望功能,即URL从表单的action重定向到新创建的URL(在这种情况下,一个包含新服务器端创建的Gist ID的URL(。

例如,从这个:

https://gist.github.com/gists //  form action

到此:

https://gist.github.com/tim-peterson/5019589 //assume this ID is generated server side

我已经在我的网站上实现了类似的功能(即,页面本身重定向到https://gist.github.com/tim-peterson/5019589)但我无法重定向URL(它保持为https://gist.github.com/gists)。

这完全是服务器端的问题(设置头?(还是pjax中缺少什么?我使用的是我今天下载的pjax的一个版本,所以不可能是我使用了一个有缺陷的pjaxs版本。

您找到解决方案了吗?我也有类似的问题。

基本上,您需要在响应标头中设置X-PJAX-URL属性。它的值应该与请求URL相同。

在拉拉威尔,我是这样做的。。。

App::after(function($request, $response)
{
  $response->headers->set('X-PJAX-URL', $request->getRequestUri());
});

使用$.pjax.submit((可能有一种更优雅/正确的方法来实现这一点,但这是我一直在使用的解决方案,没有任何问题。我在提交之前序列化表单输入,然后将它们POST到我的服务器。然后检查服务器的回复,以确保在调用PJAX继续之前不需要阻止用户继续。

$("#save").click(function(e) {
  e.preventDefault();
  dataString = $("#form").serialize();
  $.ajax({
    type: "POST",
    url: $("#form").attr("action"),
    data: dataString,
    dataType: "json",
    success: function(data)
    {
      // Handle the server response (display errors if necessary)
      $.pjax({
        timeout: 2000,
        url: data.url,
        container: '#main-content'
      });
    }
  });
});

如果响应HTML不包含初始PJAX容器,就会发生这种情况