使用onkeyup处理程序的json查询

时间:2013-07-31 01:54:47

标签: javascript jquery json

我的代码的目标是使用文本字段来执行json查询请求以指定位置 它是一种基于快速搜索的文本,搜索与位置不同的特定网站

例如: 如果我输入www.calsolum / abc我希望它在网站calsolum上搜索3个json文件:

'a','ab','abc'最后一个是实际的json文件

我的索引文件看起来像这样

<html>
<head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
    <title>Untitled Document</title>
</head>
    <script src="jquery.js"></script>
    <script src="script.js"></script>
    <input type="text" id="location" onkeyup="myFunction()">
    <body>
    </body>
</html>

script.js看起来像这样

var myFunction = function(event) {

var payload = {location: $(this).val()};

var jqxhr = $.getJSON('/location', payload);

jqxhr.done(function(data) {
   console.log(data); 
});
};

// jQuery on DOM ready
$(function() {
  $("#location").keyup(myFunction);
});

到目前为止,似乎我得到了正确的请求,但是从程序正在错误位置看错误 任何帮助将不胜感激。如果需要任何澄清,请不要犹豫。

EDIT2:所以我已经实现了建议的修改,并且在运行时出现了我的新错误

Uncaught TypeError: Cannot call method 'toLowerCase' of undefined

 GET http://mobile.sheridanc.on.ca/location?location=http%3A%2F%2Fwww.sightlineinnovation.com%2Fsyst35288%2FAPI%2Fv1.0%2Fexchanges%2FWSA 404 (Not Found) 

4 个答案:

答案 0 :(得分:2)

这应该可以帮到你

var myFunction = function(event) {

    var payload = {query: $(this).val()};

    var jqxhr = $.getJSON('/path/to/location_query', payload);

    jqxhr.done(function(data) {
       console.log(data); 
    });
};

// jQuery on DOM ready
$(function() {
  $("#location").keyup(myFunction);
});

每次用户在<input>中输入内容时,都会生成getJSON请求,其中包含以下有效内容{query: X},其中X是输入的值。< / p>

答案 1 :(得分:1)

我建议通过jQuery绑定事件,这样你就有了获取事件数据的标准方法:

$("#location").on("keyup", myFunction);

另外,这样做,你必须摆脱输入元素上的onkeyup =“myFunction()”。

更改myFunction函数以接受参数:

function myFunction(event) { .... }

然后,您可以通过检查:

来检查按下了哪个键代码
var keyCode = event.which; // example usage, returns a number indicating the keycode

希望这有助于您更接近您的需求

对于JSON - 您需要在事件处理程序内部调用$ .getJSON ,将其放在myFunction()的一侧只会在事件外运行一次。您可能希望每次事件触发时都运行它。

答案 2 :(得分:1)

从您的示例看,变量'x'在函数'myFunction'中关闭,您可能希望将变量移动到函数体中,即:

function myFunction(){
    var x=document.getElementById("location");

    //Moved getJSON inside 'myFunction' and added 'x' as second JSON param
    $.getJSON('location', x, function(data) {
        console.log(data);
    });
}

答案 3 :(得分:1)

function myFunction(){
    $.getJSON('location', {mylocation: $('#location').val()}, function(data) {
        console.log(data);
    });
}

每次用户输入一个单词时,都会发出

等请求
[your_server]/location?mylocation=[what user typed on location field]

然后在你的服务器上,只需将“mylocation”作为查询字符串。