pjax提交表单URL重定向

时间:2013-02-23 13:45:22

标签: php javascript codeigniter pushstate pjax

PJAX的文档指出Github在submitting a Gist form中使用$.pjax.submit()。 Github很好地实现的ajax表单提交的一个理想特性是URL从表单的action重定向到新创建的URL(在这种情况下,一个包含新服务器端创建的gist ID)。

例如,从中:

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版本,因此我不能使用pjax的buggier版本。

3 个答案:

答案 0 :(得分:5)

你找到了解决方法吗? 我有类似的问题。

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

在Laravel,我这样做了......

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

答案 1 :(得分:1)

使用$ .pjax.submit()可能有更优雅/正确的方法,但这是我一直使用的解决方案没有任何问题。我在提交之前序列化表单输入,然后将它们发送到我的服务器。然后检查来自服务器的回复,以确保在调用我的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'
      });

    }
  });
});

答案 2 :(得分:0)

如果响应HTML不包含初始PJAX容器

,则会发生这种情况