У меня есть функция, которая должна проходить через каждую строку таблицы, извлекать номер из этой ячейки, отправлять этот номер в URL, чтобы получить ответ json, а затем распечатать что-нибудь на основе этого. У меня почти все работает, но так как сейчас он просто выводит все это сразу, я хочу, чтобы он использовал что-то вроде .each
, чтобы проходить через каждый ряд, делать свое дело и переходить к следующему. Я также работаю с jquery datatables. Сценарий таков:
$j('#imageCheck').click(function(){
var cells = [];
var rows = oTable.fnGetNodes();
for( var i=0;i<rows.length;i++){
grabsku = $j(rows[i]).find('td:eq(2)').text();
imgreplace = $j(rows[i]).find('td:eq(2)');
s7url = 'http://checkit.com/is/image/' + grabsku;
$j.ajax({
type: 'GET',
url: s7url,
data: 'req=exists,json',
dataType: 'jsonp',
beforeSend:function(){
imgreplace.html('checking ..');
},
success: function(){
imgreplace.html(z);
}
});
}
});
Ответ и все работает отлично, мой вопрос, как зациклить их один за другим. Как и в этом примере, imgreplace.html('checking ..');
происходит одновременно через каждую строку в таблице. Я хочу, чтобы он просто обработал эту строку и после success
перешел к следующей.
Обновление
Чтобы лучше объяснить, почему я делаю это таким образом, я согласен, что это неестественно, данные, которые я собираю из каждой ячейки, помогают сформировать уникальный URL, s7url
. Каждый из них возвращает ответ от сервера, который я не могу контролировать:
s7jsonResponse(
{"catalogRecord.exists":"0"},"");
Затем я делаю что-то, зная, истинно или ложно, как это:
function jsonResponse(response){
x = response["record.exists"];
z = x == "0" ? "NO" : "YES";
}
Мне нравится решение scrappedcola, но оно привело меня к тому, что успех никогда не был достигнут Я не уверен, почему это так. Я вижу на вкладке инспектора, что есть ответ, который я вставил выше. Я пытался перенести успех в его собственную функцию, что-то вроде:
success: function(){ success(); }
...
var success = function(){
imgreplace.html(z);
i++;
handleImageCheck(i);
}
но это не помогло ..
Обновление 2
Поэтому я перестал пытаться использовать переменные в успехе. Вместо этого я поделюсь с вами своим очень уродливым хаком. В случае успешного ответа на ошибку, ick.
error: function(data, status){
if (status = "parseerror") {
imgreplace.html(z);
i++;
handleImageCheck(i);
}
}
Обновление 3
Если по какой-то причине кому-то все равно, я нашел решение для другой моей проблемы success
не стрельба. Мне нужно было добавить jsonpCallback
к параметрам, а затем обработать ответ как функцию в succcess
.