使用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(); }
谢谢大家的帮助。 我会投你的。