【问题标题】:href hyperlinks as POSThref 超链接作为 POST
【发布时间】:2012-11-28 18:40:58
【问题描述】:

我想知道哪个是映射<a href=...></a> 超链接执行 HTTP GET 以执行 HTTP POST 的最佳方式(我想避免在 URL 中传递所有变量)?例如下面的 2 hrefs。此外,我还想摆脱submit 按钮并使用常规的<a href=...></a> 超链接。有什么建议吗?

<form action="test.php?action=update" method="post" id="cart">
  <table>
    <tr>
      <td>
        <a href="test.php?action=delete&id=<?php echo $id ?>" class="r">
          remove
        </a>
      </td>
      <td>
        <a href="test.php?action=add&id=<?php echo $id ?>" class="r">add</a>
      </td>
    </tr>
    <tr>
     ...
    </tr>
  </table>
  <div> <button type="submit">Update</button> </div>
</form>

【问题讨论】:

  • 你不能在没有 AJAX 或表单的情况下提交 POST。
  • @Jivings,我不想摆脱form,而是在 URL 中传递变量
  • 您只需将链接替换为输入元素即可。
  • @Jivings,但应该是 valuehidden 输入元素,例如,我有 action=deleteaction=add 出现在 2 个单独的超链接中。
  • 元素名称为action,值为deleteadd。阅读 HTML 表单。

标签: php forms post get


【解决方案1】:

我建议使用jQuery.postclick。点击链接后,通过类似这样的方式提交数据

$('.r').on('click', function() {
        $.post('test.php', {key:'value', key2:'value2'}, function(data) {
          //error check here
        });
    return false;
});

【讨论】:

  • 虽然这是正确的,但对于 OP 来说,在开始使用 jQuery 和进行 AJAX 调用之前了解如何正确使用 HTML 表单更为重要。
  • 没错,但是为了将锚链接映射到发布请求,它不可避免地会在某个时候以 ajax 告终。
  • 没有锚。它们应该是表单元素。
  • 我只是按照问题中发布的内容,将 映射到 Post
  • Stack Exchange 不仅仅是回答问题,而是确保发布者能更好地理解。这是XY problem
【解决方案2】:

据我所知,您无法使用链接执行任何 POST 请求。您可以使用链接和 php 发出 GET 请求,作为禁用 javascript 的用户的后备,以及启用 javascript 的用户取消使用 javascript 的链接的默认行为,并在 AJAX 的帮助下使用 ajax 发出您的 POST 请求。

例如:

<a class="submit" href="hallo.html?hello=world&test=yes">Test</a>

和 js(我使用 jquery)将是:

$('.submit').click(function(){
    var urlPairs = this.href.split('?')[1].split('&'),
        total = urlPairs.length,
        current = [],
        data = {};

    for(;total;) {
        current = urlPairs[--total].split('=');
        data[current[0]] = current[1];
    }

    $.post('test.php', data);

    return false;
});

你也可以编写你的 POST 函数以获取更多信息检查jQuery post function doc

附:我wounder,如果您以任何方式使用FORM,为什么不使用提交按钮,是因为CSS样式吗?您可以像任何其他元素一样设置样式(在某些浏览器中进行一些调整)。

【讨论】:

    【解决方案3】:

    您可以将输入标签隐藏在表单中以将它们作为 POST 提交。

    <td><a href="test.php?action=delete&id=<?php echo $id;?>" class="r">remove</a></td>
    <td><a href="test.php?action=add&id=<?php echo $id;?>" class="r">add</a></td>
    

    用两种形式重写上面的内容,有&lt;input type="hidden" name="id /&gt; 和按钮&lt;input type="button" name="delete" /&gt; 等等。

    如果您在操作脚本中运行 print_r($_POST)。您将获得按钮列表和隐藏字段的值。现在,您可以为要运行的操作编写条件。我这里没有写完整的代码,只是传递一下思路。

    编辑:参见下面的示例。

         <form  method="post" id="cart">
            <table>
                    <input type="hidden" name="id" value='some value' />
                    <input type="submit" name="action" value="delete" />
                    <input type="submit" name="action" value="add" />
                </tr>
                <tr>
                    ...
                </tr>
            </table>
            <div><button type="submit">Update</button></div>
         </form>
    
    
        <?php print_r($_POST); ?>
    

    【讨论】:

    • 查看我所做的更改。我没有给出完整的代码,只是你的作业。
    • 您甚至可以使用相同的表单但在操作脚本上有条件来运行它。
    • 以防万一,我使用另外两种形式,一种具有&lt;input type="hidden" name="action" value="add"/&gt;,另一种具有&lt;input type="hidden" name="action" value="add"/&gt;,我将在一天结束时拥有3forms,一个外部,其中包含这2个新形式,可以嵌套forms吗?
    • 如果可以正确编写动作脚本条件,则不需要嵌套表单或不需要多个表单。
    • 看到这篇文章form nesting
    猜你喜欢
    • 2017-12-09
    • 2010-10-17
    • 1970-01-01
    • 1970-01-01
    • 2017-06-12
    • 2014-01-17
    • 1970-01-01
    • 1970-01-01
    • 2018-01-09
    相关资源
    最近更新 更多