href超链接作为POST

时间:2012-12-11 08:36:28

标签: php forms post get

我想知道哪个是映射执行HTTP GET的<a href=...></a>超链接以执行HTTP POST的最佳方式(我想避免传递URL中的所有变量)?例如,下面是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>

3 个答案:

答案 0 :(得分:2)

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

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

答案 1 :(得分:0)

您可以将输入标记保持为隐藏在表单中,以便将其作为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>

使用<input type="hidden" name="id />两种形式重写上述内容 和按钮<input type="button" name="delete" /> 等。

如果您在动作脚本中运行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); ?>

答案 2 :(得分:0)

据我所知,您无法使用链接执行任何POST请求。对于禁用了javascript的用户,你可以使用链接和php作为后备来获取GET请求,对于那些启用了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

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