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版本。
答案 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容器
,则会发生这种情况