使用jQuery替换XMLHttpRequest

我是JavaScript库的新手。 我想用jQuery替换我当前的代码。 我当前的代码如下所示:

var req; function createRequest() { var key = document.getElementById("key"); var keypressed = document.getElementById("keypressed"); keypressed.value = key.value; var url = "/My_Servlet/response?key=" + escape(key.value); if (window.XMLHttpRequest) { req = new XMLHttpRequest(); } else if (window.ActiveXObject) { req = new ActiveXObject("Microsoft.XMLHTTP"); } req.open("Get", url, true); req.onreadystatechange = callback; req.send(null); } function callback() { if (req.readyState == 4) { if (req.status == 200) { var decimal = document.getElementById('decimal'); decimal.value = req.responseText; } } clear(); } 

我想用一些比jQuery更友好的东西替换我的代码

 $.get(url, callback); 

但是它不会调用我的回调函数。

另外我想连续调用一个名为createRequest的函数。 jQuery有一个很好的方法吗?

 $.get(url, {}, callback); 

应该做的伎俩。 您的回调可以像这样简化:

 function callback(content){ $('#decimal').val(content); } 

甚至更短:

 $.get(url, {}, function(content){ $('#decimal').val(content); }); 

总而言之,我认为这应该有效:

 function createRequest() { var keyValue = $('#key').val(); $('#keypressed').val(keyValue); var url = "/My_Servlet/response"; $.get(url, {key: keyValue}, function(content){ $('#decimal').val(content); }); } 

取出readyState和状态检查。 jQuery仅在成功时调用您的回调。 您的回调提供了参数(data, textStatus) ,因此您应该使用data而不是req.responseText

window.setTimeout()按照另一个答案的建议不会做你想要的 – 只等待然后调用你的函数一次。 您需要使用window.setInterval() ,它将定期调用您的函数,直到您取消它。

所以,总结一下:

 var interval = 500; /* Milliseconds between requests. */ window.setInterval(function() { var val = $("#key").val(); $("#keypressed").val(val); $.get("/My_Servlet/response", { "key": val }, function(data, textStatus) { $("#decimal").val(data); }); }), interval); 

我不认为jQuery实现了超时function,但普通的旧javascript做得相当不错:)

根据文档 ,jQuery.get的参数是url, data, callback ,而不是url, callback

在回调函数结束时调用JavaScript的setTimeout函数应该足以让它连续执行。

无需在URL上设置GET参数,jQuery将自动设置它们。 试试这段代码:

 var key = document.getElementById("key"); [...] var url = "/My_Servlet/response"; $.get (url, {'key': key}, function (responseText) { var decimal = document.getElementById ('decimal'); decimal.value = responseText; }); 

最后我猜它是添加了类型。 这似乎对我有用。

  function convertToDecimal(){ var key = document.getElementById("key"); var keypressed = document.getElementById("keypressed"); keypressed.value = key.value; var url = "/My_Servlet/response?key="+ escape(key.value); jQuery.get(url, {}, function(data){ callback(data);} , "text" ); } function callback(data){ var decimal = document.getElementById('decimal'); decimal.value = data; clear(); } 

谢谢大家的帮助。 我会投你的。