5

PJAX的文档指出 Github 用于$.pjax.submit()提交Gist 表单。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。

4

3 回答 3

5

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

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

在 Laravel 中,我是这样做的......

App::after(function($request, $response)
{
  $response->headers->set('X-PJAX-URL', $request->getRequestUri());
});
于 2013-12-27T09:54:20.257 回答
2

使用 $.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'
      });

    }
  });
});
于 2013-02-24T15:25:34.210 回答
0

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

于 2017-01-16T16:29:31.200 回答