使用jQuery替换XMLHttpRequest

时间:2008-09-19 18:28:29

标签: 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/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有一个很好的方法吗?

6 个答案:

答案 0 :(得分:19)

$.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);
    });
}

答案 1 :(得分:3)

取出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);

答案 2 :(得分:2)

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

答案 3 :(得分:2)

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

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

答案 4 :(得分:2)

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

答案 5 :(得分:0)

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

  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();
  }

感谢大家的帮助。我会投票给你。