Javascript 使用jQuery替换XMLHttpRequest
我对JavaScript库还很陌生。我想用jQuery替换我当前的代码。我当前的代码如下所示: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
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()是一个正确的函数,可以在需要反复调用某些内容时使用。