我已经创建了一个函数,它应该进行长轮询并获取正在被“推送”给我的实时数据。现在我正在测试一个json对象,它以我收到数据后的样式进行格式化。到目前为止,它似乎工作准确。我只是想知道你对它的看法?你会以某种方式重构它还是完全以另一种方式完成它?
var url = '../../path_to_script/respondents.json';
function fetchData() {
$.ajax({
url: url,
method: 'GET',
dataType: 'json',
contentType: "application/json; charset=utf-8",
cache: false,
success: function (data) {
//parseData(data);
setTimeout(function () { fetchData() }, 5000);
console.log(data);
},
error: function (data) {
setTimeout(function () { fetchData() }, 5000)
}
});
}
此致
答案 0 :(得分:3)
这有点像预期的那样。由于您在请求返回后明智地选择触发setTimeout
,因此不会出现“重叠”请求。这是一件好事。
无论如何,您可以使用jQuerys“new”延迟ajax对象,这可能更方便一点。
(function _poll() {
$.getJSON( url ).always(function( data ) {
console.log( data );
_poll();
});
}());
注意:.always()
是全新的(jQuery 1.6)。
修改强>
答案 1 :(得分:2)
我建议将事件更改为:
success: function (data) {
console.log(data);
},
complete: function () {
setTimeout(function () { fetchData() }, 5000)
}
在成功和错误之后始终调用complete事件。这样你只需要setTimeout一次,这样更好。
答案 2 :(得分:1)
我会做一些改变
method
更改为type
,method
不是$.ajax
的有效参数。这是一个错误contentType
,dataType: 'json'
就足以拥有这些值
error: function (xhr, status, errorThrown) {
alert("There was an error processing your request.\nPlease try again.\nStatus: " + status);
}
希望这会有所帮助。干杯