2

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

出现了一项新要求,这意味着根据在客户端上输入的数据,也可以发布 4 个不同的目标页面。

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

通过查看源 html,我想可以使用 jquery 来操作提交按钮上的回发目标,但这似乎有点 hack。

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

4

2 回答 2

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。如果您需要一次发布到多个 URL,则必须使用其他方法,例如 XMLHttpRequest。如果是这种情况,请发表评论表明这一点,我将为此提供一个示例。

于 2009-06-21T14:32:37.857 回答
1

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

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

RFC 1945 和 RFC 2068 指定不允许客户端更改重定向请求的方法。然而,大多数现有的用户代理实现将 302 视为 303 响应,无论原始请求方法如何,都对 Location 字段值执行 GET。状态码 303 和 307 已被添加用于希望明确明确期望客户端做出何种反应的服务器。

因此,恕我直言,选择仅限于 JavaScriptaction修改或从您的服务器重新发布数据(您的服务器接受发布的数据,对其进行分析并自行执行 POST)。

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

将默认action点指向您的后备脚本。如果您在提交前成功修改action- 此时一切正常。如果某些事情失败了,比如 JavaScript 被禁用 - 使您的后备脚本输出页面带有隐藏的数据字段(因此不应再修改)和可见的提交按钮,将数据发布到适当的位置。

于 2009-06-21T11:26:30.883 回答