Chrome и JQuery
Есть код, который получает с сервера данные и отображает их в виде таблицы, таблицу заполняю с помощью jQuery.Templates, данные получаю простым $.ajax() (хотя пробовал и get).
У меня в браузере, Chrome 18, Win7, всё корректно отображается и обоновляется раз в 5 секунд (так задумано). Но на соседней машине, где точно такой же Chrome 18, но на WinXP этот код не работает - он просто не получает ничего.
Вот код (я не гуру js):
Код:
tableController = new (function(){
var self = this;
var compiledTemplate = null;
this.lastStage = null;
this.prepareTemplate = function(){
$('#points_table_header_tmpl').template('points_table_header');
compiledTemplate = $('#points_table_tr_tmpl').template('points_table');
}
this.onUpdate = function(data){
// Перестроить таблицу, основываясь на полученных данных
self.lastStage = data['round'];
self.updateTemplate(self.lastStage);
};
this.updateTemplate = function(data){
if( compiledTemplate ){
$('#points_table').empty();
$('#points_table').append($.tmpl('points_table_header'));
$('#points_table').append($.tmpl('points_table', data));
}else{
this.prepareTemplate();
this.updateTemplate(data);
}
}
this.updateData = function(){
//$.get('/ajax/get_round', {}, this.onUpdate, 'json');
$.ajax({
type: 'GET',
url: '/games_ajax/get_round',
success: this.onUpdate,
dataType: 'json',
data: "",
contentType: "application/json; charset=utf-8",
async: false
});
};
})();
$(document).ready(function(){
tableController.updateData();
var updateTimer = setInterval(function(){
tableController.updateData();
}, 5000);
});
var self = this;
var compiledTemplate = null;
this.lastStage = null;
this.prepareTemplate = function(){
$('#points_table_header_tmpl').template('points_table_header');
compiledTemplate = $('#points_table_tr_tmpl').template('points_table');
}
this.onUpdate = function(data){
// Перестроить таблицу, основываясь на полученных данных
self.lastStage = data['round'];
self.updateTemplate(self.lastStage);
};
this.updateTemplate = function(data){
if( compiledTemplate ){
$('#points_table').empty();
$('#points_table').append($.tmpl('points_table_header'));
$('#points_table').append($.tmpl('points_table', data));
}else{
this.prepareTemplate();
this.updateTemplate(data);
}
}
this.updateData = function(){
//$.get('/ajax/get_round', {}, this.onUpdate, 'json');
$.ajax({
type: 'GET',
url: '/games_ajax/get_round',
success: this.onUpdate,
dataType: 'json',
data: "",
contentType: "application/json; charset=utf-8",
async: false
});
};
})();
$(document).ready(function(){
tableController.updateData();
var updateTimer = setInterval(function(){
tableController.updateData();
}, 5000);
});
Код:
{"round":[
{"id":273,
"name":"super-mega-username",
"stages":[
{"points":6},
{"points":76},
...
],
"stage_sum":249,
"round_sum":0
},
...
]}
{"id":273,
"name":"super-mega-username",
"stages":[
{"points":6},
{"points":76},
...
],
"stage_sum":249,
"round_sum":0
},
...
]}
Если он возвращает просто "а", то она доходит до всех. Причем другие браузеры (кроме ие, разумеется) ведут себя нормально и отображают таблицу.
Надеюсь на вашу помощь.
пишут, что у них подобные проблемы, но их решение (установить data: null или data: "") мне не помогло.
UPD
Ослик ИЕ сдался и стал работать как надо, после того, как я принудительно вычистил ему кеш грязным ёршиком и проставил no-cache заголовки.
UPD2
Хром тоже заработал.
Ошибок быть не может, т.к. с моего компа запрос идёт (сервер на другой машине). Все на всех машинах, во всех браузерах всё работает как часы (кроме ие, разумеется). У меня при дампе в консоль выдаёт массив объектов ( так: [ Object, Object, ..., Object ] ), а на WinXP просто пустой массив ( который [ ] ). Вроде в интернетах люди
UPD
Ослик ИЕ сдался и стал работать как надо, после того, как я принудительно вычистил ему кеш грязным ёршиком и проставил no-cache заголовки.
UPD2
Хром тоже заработал.
Добавьте обработчик для error в $.ajax, посмотрите что он покажет.
Посмотрите что в логах web-сервера, запрос к нему вообще доходит, нет ли ошибок?