太长的URL - 如何在jquery中为锚标记执行POST

时间:2014-03-01 07:44:19

标签: javascript jquery jsp

在我的应用程序中,我使用JQuery数据表来显示我的产品详细信息。我有很多购买过滤器(价格,产品类型等),最后在数据表用户有链接查看所选的产品详细信息。表格示意图如下;

table

在表格填充时,我将过滤器参数附加到锚元素的href。代码段如下;

"mRender" : function(page, type, full) {
        return '<a href="' + CXT_PATH
                + '/page?filters='
                + getFilters()
                + '">' + "LINK" + '</a>'
                }                                       
                }

这里getFilters()有时会返回100个过滤器,因此创建的网址太长。我认为,当默认锚链接点击时,它们作为GET请求传递。因此可能存在大小限制。

因此,当我们选择更多过滤器时,我不希望我的用户得到奇怪的结果。

我打算如下所示:

每当用户点击链接时,它将在javascript中调用一个方法并执行表单发布(因为需要重新加载页面)。请指导我,如何在javascript或jquery或其他任何更好的方法实现相同的目标。

我正在使用Spring MVC + JSP + Javascript&amp; JQuery的

2 个答案:

答案 0 :(得分:1)

这是一个开始:

使用XMLHttpRequest对象:

getXHR函数的来源:XMLHttpRequest Browser Support

function getXHR() { 
  if (window.XMLHttpRequest) {
    // Chrome, Firefox, IE7+, Opera, Safari
    return new XMLHttpRequest(); 
  } 
  // IE6
  try { 
    // The latest stable version. It has the best security, performance, 
    // reliability, and W3C conformance. Ships with Vista, and available 
    // with other OS's via downloads and updates. 
    return new ActiveXObject('MSXML2.XMLHTTP.6.0');
  } catch (e) { 
    try { 
      // The fallback.
      return new ActiveXObject('MSXML2.XMLHTTP.3.0');
    } catch (e) { 
      alert('This browser is not AJAX enabled.'); 
      return null;
    } 
  } 
}


var xhr = getXHR();
xhr.open("POST", url, true);
xhr.setRequestHeader("Content-Type", "application/x-www-form-urlencoded; charset=UTF-8");
xhr.send("your-querystring");

答案 1 :(得分:0)

您可以尝试以下方法,在表格中创建表单,单击过滤器链接时将过滤器值分配给表单中的隐藏元素并提交表单。

<强> HML

<form action="<server_path>" method="post" id="filterform">
<input type="hidden" name="filters" id="filters" />
<input type="submit/>
</form>

Javascript / Jquery

"mRender" : function(page, type, full) {
        return '<a onclick="' submitFilter() '">' + "LINK" + '</a>'
 }     

submitFilter: function (CXT_PATH){
       $( "#filters" ).val(getFilters());
       $( "#filterform" ).submit();
}