我有一个使用跨页面发布的网页发布到不同的目标网页。

出现了新的要求,这意味着根据客户端输入的数据,可能会有4个不同的目标页面发布。

是否有可能以某种方式在客户端上动态更改跨页面发布目标?

从查看源代码html我想可以使用jquery来操作提交按钮上的回发目标,但这看起来有点像黑客。

我有什么选择,重写页面以删除跨页面发布并执行响应重定向传递会话中的数据?

有帮助吗?

解决方案

是的,您当然可以更改表单的操作。我将引导您完成如何操作。

首先,您的表单必须在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的最后一步中,这将提交表单,因为input元素的类型是 submit ,并且该函数由 onClick 事件触发。例如,如果这是一个按钮类型的输入元素,或者 a 标签或 img 那么我们需要触发表单来提交使用以下内容:

document.aformiam.submit();

此解决方案可用于更改操作并提交到单个网址。如果您需要一次发布到多个URL,则必须使用其他方法,例如XMLHttpRequest。如果是这种情况,请发表评论,指出如此,我将为此提供一个示例。

其他提示

您可以尝试在表单提交之前使用JavaScript更改表单的 action 属性。

不幸的是,大多数浏览器都不支持POST重定向。甚至 RFC说明

  

RFC 1945和RFC 2068指定不允许客户端   更改重定向请求的方法。但是,大多数   现有的用户代理实现将302视为303   响应,无论如何都对位置字段值执行GET   原始请求方法。状态代码303和307具有   已添加到希望明确清楚哪些服务器的服务器   对客户的反应是预期的。

所以,恕我直言,选择仅限于JavaScript action 修改或从服务器重新发布数据(您的服务器接受POSTed数据,分析它并自己执行POST)。

在会话中存储数据(或者只是在POST上返回它)然后从客户端重新发布它需要JavaScript支持(自动提交表单)或者让用户点击“提交”。按钮再一次。不过,您可以考虑使用此方法作为后备。

使默认操作指向您的后备脚本。如果您在提交之前成功修改了 action - 此时一切正常。如果某些内容失败,例如JavaScript被禁用 - 请使用隐藏数据字段创建回退脚本输出页面(因此不应再修改)和可见的提交按钮,将数据发布到正确的位置。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top