通过jquery在URL中传递哈希值,并使mysql查询


Pass hash in URL with jquery and make mysql query

好的,我有这种情况。我有一个名为skills的表,带有一个简单的模式

id|name
It has records like
1|Cashier
2|Software Developer
3|C#
4|C# 3.0
5|C# Programming

在前端,我有一个文本框,下拉框进行ajax调用并在下拉框中填充ajax调用结果,如

    $.getJSON(that.path + "?q=" + encodeURIComponent(keyword) , function(result){
        if (result.length == 0) {

获取匹配结果。

如果我搜索"软件"answers"收银员"这样的词,我会得到正确的结果。但问题是,当我搜索任何带有"#"符号的技能时。

that.path导致php函数

public function findSkills() {
    print_r($_GET['q']);

如果我想搜索包含'#'的所有技能,我的ajax调用URL变成类似于

的东西
http://somedomain.xyz/skills/findSkills?q=%23

然后当我打印$_GET['q']时,我没有打印任何东西。我该如何克服这个问题?

期望的SQL查询

SELECT * FROM skills  WHERE (`name` LIKE '%#%') ORDER BY `id` ASC  LIMIT 10

我已经读到,任何部分在URL后哈希(包括哈希)不发送到服务器。如果是这种情况,是否有其他方法来实现这将允许我使SQL查询获取记录与'#'?

任何帮助都将非常感激。如果需要,请让我知道我是否缺少任何其他数据/更多代码。我将相应更新问题

对于我来说,使用以下测试代码片段可以很好地工作:

if (isset($_GET['q'])) {
  echo json_encode($_GET['q']);
  exit;
}
?>
<form>
  <input name="q" id="q">
  <button>Submit</button>
</form>
<script src="http://code.jquery.com/jquery-1.11.3.js"></script>
<script>
$('button').click(function() {
  $.getJSON(
    'test.php?q=' + encodeURIComponent(q.value),
    function(result) {
      $('body').append($('<p>' + result + '</p>'));
    }
  );
  return false;
});
</script>

值得一提的是,查看HTTP请求(使用某些工具,如Firebug)并输入例如C#,它会报告:

/测试/stackOverflow/test.php吗? q = C % 23 HTTP/1.1

使用'test.php?q=' + q.value代替'test.php?q=' + encodeURIComponent(q.value)时报告:

/测试/stackOverflow/test.php吗? q = C HTTP/1.1

换句话说,虽然"URL中哈希(包括哈希)之后的任何部分都不会发送到服务器"是真的,但当使用encodeURIComponent()时,此规则完全被绕过了。

所以它确认了,如果你像你展示的那样写应该工作。
您当前的问题可能是一个简单的其他错误。