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容器,就会发生这种情况