【问题标题】:Making href (anchor tag) request POST instead of GET as passing the parameter使href(锚标记)请求POST而不是GET作为传递参数
【发布时间】:2016-10-24 00:23:13
【问题描述】:

问题是,当我使用以下方法时,会显示整个 URL。可能是因为 GET 请求 if href。我想避免这种情况,并且我想要 POST 请求。

index.html

<a id="ccviewMiniStatementId">View mini statement</a>

nonFinancial.js

$('#ccviewMiniStatementId').click(function(event) {

    var ccMonthVal=$("#ccMonthId").val();
    var ccYearVal=$("#ccYearId").val();
    var cCRefNumId=$("#cCRefNumId").val();

    var errExpVal = validateCcExpiry();

    if (errExpVal==false)
    {
        event.preventDefault();
        return false;
    }

    // I am passing values to my controller and there it is GET 
    //because POST is not supported. I want to make it POST.
    $("#ccviewMiniStatementId").attr("href", "getpdfcreditcard?month="+ccMonthVal+"&year="+ccYearVal+"&cCReferenceNo="+cCRefNumId);
    $("#pdfViewer").submit();           
});

我的控制器 NonFinancial.java

@RequestMapping(value="/getpdfcreditcard", method=RequestMethod.GET, params = {"month","year","cCReferenceNo"})
public ResponseEntity<byte[]> getPDF(@RequestParam(value="month", required = true) String month,
    @RequestParam(value="year", required = true) String year,
    @RequestParam(value="cCReferenceNo", required = true) String cCReferenceNo,
    HttpServletResponse response) throws IOException, SQLException {

    logger.debug("month/year/cCReferenceNo: "+month+"/"+year+"/"+cCReferenceNo);
}

所以我想:当我点击一个锚标记时,它应该做一个 POST。我怎么做?我不想使用&lt;form&gt;&lt;/form&gt;

【问题讨论】:

    标签: javascript java jquery html spring-mvc


    【解决方案1】:

    看起来你正在使用 jQuery,所以很简单:

    $('a').click(function() {
        var fullLink = $(this).attr('href');
        var splittedLink = fullLink.split("?");
        var href = splittedLink[0];
        var qs = splittedLink[1];
    
        // convert qs to body
        var splittedQs = qs.split('&');
        var body = {};
    
        for(var key in splittedQs) {
            var t = splittedQs[key].split('=');
            body[t[0]] = t[1];
        }
    
        $.ajax({
            type: 'post',
            data: body,
            url: href,
            success: function() { ... }
        });
    
        return false;  // prevent default
    });
    

    【讨论】:

    • 如果我使用 ajax 则不会从控制器生成 pdf 这就是我不使用 ajax 的原因。
    • @RahulKhanna 如果你不想要 Ajax,你可以动态生成表单并提交。
    【解决方案2】:

    在 HTML 中不可能使 href 使用 POST。但是正如@modernator 指出的那样,您可以使用 JavaScript 来监听点击事件,然后手动触发 AJAX 请求。

    或者,您可以使用带有隐藏输入的表单。在那里你可以指定提交方法。示例:

    <form method="post" action="<your-url>">
        <input type="hidden" name="month" value="<month-value>">
        <button type="submit">View Statement</button>
    </form>
    

    【讨论】:

    • 但我也想传递价值。我怎么能这样做?
    • 通过type="hidden" 输入。在我上面的示例中,表单将提交类似于 { month: "&lt;month-value&gt;" } 的内容
    • 如何在控制器中获取隐藏提示的值?
    • @RahulKhanna 我看到您编辑的答案指定您不想使用 from。我对spring mvc不熟悉,但我觉得它可能是你的控制器语法,因为它应该支持GET请求。经过快速的谷歌搜索,我找到了this SO question,也许它可以帮助你。
    • 我不想要按钮,客户端只需要超链接,即锚标签。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-02-10
    • 2023-01-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多