2013-02-23 51 views
5

PJAX的文档指出Github使用$.pjax.submit()submitting a Gist form。 Github很好地实现了一个ajax表单提交的期望功能,该URL从表单的action重定向到一个新创建的URL(在这种情况下,其中一个包含新创建的服务器端创建的主要ID)。pjax提交表单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相当于)但我无法重定向网址(它保持为https://gist.github.com/gists)。

这完全是一个服务器端问题(设置标题?)还是有什么我在pjax丢失?我正在使用我今天下载的pjax版本,所以不能使用pjax的buggier版本。

回答

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' 
     }); 

    } 
    }); 
}); 
+0

感谢啊,这是我在做太多的黑客到底是什么解。问题是这是否可以用2个AJAX请求或1来完成。显然,只有一个请求,其中'data.url'被推送到浏览器栏,就像内容被推送到' #主content'。现在我正在看它,Github Gist似乎和我们做了同样的事情,虽然他们在做PJAX(POST) - > PJAX(GET),我们正在做AJAX(POST) - > PJAX得到)。底线是,只做1个请求似乎更高效(在下一条评论中继续...)。 – 2013-02-24 15:54:14

+0

我只是不确定在1请求中是否可以使用PJAX,或者它是否需要我不知道的服务器端黑客(我正在使用PHP/Codeigniter并使用AJAX执行301/302重定向请求不会改变URL,也许它不可能在任何语言/框架?)。 – 2013-02-24 15:57:19

5

您是否找到任何解决方法? 我有类似的问题。

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

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

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

它发生,如果响应HTML不包含初始PJAX容器