对字符串进行编码以作为参数传递

时间:2017-12-12 10:22:42

标签: javascript jquery ajax

我有这个功能:

function eLookup(type, long, lat, distance) {
//var sFilter = getCompanyProductFamilies();

distance = distance * 1000;
$.ajax({
    url: O.GenURL('xtmp_Maps/Get' + type + '.asp', 'long=' + long + '&lat=' + lat + '&distance=' + distance),
    success: eval('plotEntity' + type)
});

}

我有另一个名为getCompanyProductFamilies的函数,我已经在上面的函数中注释掉了调用,因为有些错误,这部分是我被卡住了。

function getCompanyProductFamilies()
{
  var cb = document.getElementsByClassName("PRODFAM");
  var sAnd = "";

  for(var i = 0; i < cb.length; i++)
  {
    sAnd += "comp_c_productfamily like '%," + cb[i].id.replace("pdfam_", "") + ",%' or ")
  }

  if(cb.length > 0)
  {
    sAnd = sAnd.slice(0, -4);
    sAnd = " and (" + sAnd + ")";
  }

  return sAnd;
}

上面的函数应该获得所有具有PRODFAM类名的复选框,对于每个被检查的复选框,它应该慢慢生成SQL语句的where子句的一部分。我知道SQL注入的含义,但这不是在开放的互联网上,所以忽略它。我尝试了几种使用jQuery获取已检查的方法,但我没有做过任何工作。

正在处理的HTML示例如下:

<input type="checkbox" id="pdfam_711121" class="PRODFAM"/>
  <label for="pdfam_711121" class="VIEWBOX">Local Wage Rate</label><br />
<input type="checkbox" id="pdfam_711131" class="PRODFAM"/>
  <label for="pdfam_711131" class="VIEWBOX">Temporary Staff</label><br />
<input type="checkbox" id="pdfam_711341" class="PRODFAM"/>
  <label for="pdfam_711341" class="VIEWBOX">Other Contractors</label><br />

上述类别中约有25个,这只是3个例子。类别的数量也可能会发生变化。我需要的功能是:

获取已检查的复选框ID列表,并构造一个字符串,该字符串可作为参数传递给top函数中的ajax调用。当ajax调用的目标接收到参数时,我可以在该页面中放置一个函数,为SQL调用创建where子句。

任何帮助都将非常感激。名为eLookup的top函数不能改变太多,但我可以添加查询字符串参数,这就是我想要做的。另一个功能与此无关。

1 个答案:

答案 0 :(得分:0)

这是有效的代码。

function getCompanyProductFamilies()
{
  var cb = document.getElementsByClassName("PRODFAM");
  var sAnd = "";
  var bChecked = false;

  for(var i = 0; i < cb.length; i++)
  {
    if(cb[i].checked == true)
    {
      sAnd += "comp_c_productfamily like '%," + cb[i].id.replace("pdfam_", "") + ",%' or ";
      bChecked = true;
    }
  }

  if(bChecked)
  {
    sAnd = sAnd.slice(0, -4);
    sAnd = " and (" + sAnd + ")";
  }
  return sAnd;
}

因为这会返回一个直接传递给查询字符串上的ASP页面的纯文本字符串,我可以加密它。如果我使用encodeURIComponent,那么传递到查询字符串是安全的,但它仍然可以改变。由于系统运行的位置并不重要,但我可能会考虑保护字符串。