我有一个使用跨页面发布的网页发布到不同的目标网页。
出现了新的要求,这意味着根据客户端输入的数据,可能会有4个不同的目标页面发布。
是否有可能以某种方式在客户端上动态更改跨页面发布目标?
从查看源代码html我想可以使用jquery来操作提交按钮上的回发目标,但这看起来有点像黑客。
我有什么选择,重写页面以删除跨页面发布并执行响应重定向传递会话中的数据?
答案 0 :(得分:2)
是的,您当然可以更改表单的action
。我将引导您完成如何操作。
首先,您的表单必须在HTML中指定名称和操作URL:
<form name="aformiam" method="post" action="/somewhere/to/go.php">
接下来,您将要在表单提交上运行一些JavaScript,因此您应该将提交按钮的onClick属性设置为一个函数,如下所示:
<input type="submit" value="Send Form" onClick="return submitForm();" />
最后是您的JavaScript函数,以实际更改表单操作并提交表单。
function submitForm() {
// do anything here you need to determine which URL to post to
// I am just making an example here
var targetURL = '/some/url/to/post.php';
// now we will change the form's action
document.aformiam.action = targetURL;
// finally, submit the form by returning true
return true;
}
请注意,在我们返回true的最后一步中,这将提交表单,因为输入元素的类型为submit
,并且该函数由onClick
事件触发。如果这是,例如,button
类型的输入元素,或a
标记或img
,那么我们需要触发表单以使用以下内容提交:
document.aformiam.submit();
此解决方案可用于更改操作并提交到单个网址。如果您需要一次发布到多个URL,则必须使用其他方法,例如XMLHttpRequest。如果是这种情况,请发表评论,指出如此,我将为此提供一个示例。
答案 1 :(得分:1)
您可以尝试在表单提交之前使用JavaScript更改表单的action
属性。
不幸的是,大多数浏览器都不支持POST重定向。甚至RFC notes:
RFC 1945和RFC 2068指定不允许客户端 更改重定向请求的方法。但是,大多数 现有的用户代理实现将302视为303 响应,无论如何都对位置字段值执行GET 原始请求方法。状态代码303和307具有 已添加到希望明确清楚哪些服务器的服务器 对客户的反应是预期的。
所以,恕我直言,选择仅限于JavaScript action
修改或从服务器重新发布数据(您的服务器接受POSTed数据,分析它并自己执行POST)。
在会话中存储数据(或者只是在POST上返回它)然后从客户端重新发布它需要JavaScript支持(自动提交表单)或让用户再次单击“提交”按钮。不过,您可以考虑使用此方法作为后备。
将默认action
指向您的后备脚本。如果您在提交之前成功修改了action
- 此时一切正常。如果某些内容失败,例如JavaScript被禁用 - 请使用隐藏数据字段创建回退脚本输出页面(因此不应再修改)和可见的提交按钮,将数据发布到正确的位置。