Javascript 使用jQuery替换XMLHttpRequest

Javascript 使用jQuery替换XMLHttpRequest,javascript,jquery,ajax,Javascript,Jquery,Ajax,我对JavaScript库还很陌生。我想用jQuery替换我当前的代码。我当前的代码如下所示: var req; function createRequest() { var key = document.getElementById("key"); var keypressed = document.getElementById("keypressed"); keypressed.value = key.value; var url = "/My_Servlet/re

我对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();
}
function callback(content){
    $('#decimal').val(content);
}
我想用一些更友好的东西来代替我的代码,比如jQuery

$.get(url, callback);
但是它不调用我的回调函数

我还想连续调用名为
createRequest
的函数。jQuery有一种很好的方法来实现这一点吗?
我不认为jQuery实现了一个超时函数,但是简单的老javascript做得很好:)

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

在回调函数的末尾调用JavaScript的setTimeout函数应该足以让它继续执行

$.get(url, {}, callback);
我们应该做到这一点。您的回调可以简化如下:

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();
}
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仅在成功时调用回调。回调函数提供了参数
(数据,textStatus)
,因此您应该使用
数据
,而不是
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);

不需要在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();
  }

谢谢大家的帮助。我会投票支持你。

你喜欢什么都行。如果不需要传递任何值,请使用NULL,或者可以潜在地移动key=?从查询字符串到数据参数。参见文档示例代码。“数据”是将发送到服务器的键/值对。另外,show调用中省略数据参数的示例。。。我尝试了url=“/My_Servlet/response”;获取(url,“key=“+escape(key.value)”,回调);仍然不会调用回调函数。如果
callback
未定义且
data
是函数,jQuery将自动交换参数。setTimeout()调用函数一次。setInterval()是一个正确的函数,可以在需要反复调用某些内容时使用。