我有一个使用跨页发布来发布到不同目标页面的网页。
出现了一项新要求,这意味着根据在客户端上输入的数据,也可以发布 4 个不同的目标页面。
是否可以在客户端上以某种方式动态更改跨页发布目标?
通过查看源 html,我想可以使用 jquery 来操作提交按钮上的回发目标,但这似乎有点 hack。
我有什么选择,重写页面以删除跨页面发布并在会话中传递数据进行响应重定向?
我有一个使用跨页发布来发布到不同目标页面的网页。
出现了一项新要求,这意味着根据在客户端上输入的数据,也可以发布 4 个不同的目标页面。
是否可以在客户端上以某种方式动态更改跨页发布目标?
通过查看源 html,我想可以使用 jquery 来操作提交按钮上的回发目标,但这似乎有点 hack。
我有什么选择,重写页面以删除跨页面发布并在会话中传递数据进行响应重定向?
是的,您当然可以更改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。如果您需要一次发布到多个 URL,则必须使用其他方法,例如 XMLHttpRequest。如果是这种情况,请发表评论表明这一点,我将为此提供一个示例。
action
您可以尝试在表单提交之前使用 JavaScript更改表单的属性。
不幸的是,大多数浏览器不支持 POST 重定向。甚至RFC 注释:
RFC 1945 和 RFC 2068 指定不允许客户端更改重定向请求的方法。然而,大多数现有的用户代理实现将 302 视为 303 响应,无论原始请求方法如何,都对 Location 字段值执行 GET。状态码 303 和 307 已被添加用于希望明确明确期望客户端做出何种反应的服务器。
因此,恕我直言,选择仅限于 JavaScriptaction
修改或从您的服务器重新发布数据(您的服务器接受发布的数据,对其进行分析并自行执行 POST)。
将数据存储在会话中(或仅在 POST 上返回)然后从客户端重新发布它需要 JavaScript 支持(自动提交表单)或让用户再次单击“提交”按钮。不过,您可以考虑使用此方法作为备用方法。
将默认action
点指向您的后备脚本。如果您在提交前成功修改action
- 此时一切正常。如果某些事情失败了,比如 JavaScript 被禁用 - 使您的后备脚本输出页面带有隐藏的数据字段(因此不应再修改)和可见的提交按钮,将数据发布到适当的位置。