асинхронная функция обратного вызова (JSON) не работает в Opera, Safari и ie7

пожалуйста, извините мой плохой английский ..

мой скрипт работает в firefox 5, т.е. 8, но не в ie7, опере 9.5, сафари..

Каждый чекбокс следует проверять запросом к базе данных, нужно ли его активировать

сценарий:

$('.merkzettel').each(function(){   
        var name =  $(this).attr("value");
    var url = "istInMappe.php?id=" + session_id + "&bild=" + name;
    $.getJSON(url,function(data){
            checken (data.checked, data.number);

    });
});
function checken (bool, number){
if (bool == "checked"){
    var elem = "#img" + number;
    $(elem).attr('checked','checked');  
}

}

Ответ из скрипта (istInMappe.php?...) правильный в опере: {"checked":"unchecked","number":"1553"} сообщения об ошибке нет..

Но функция "checken" не выполняется и флажки не проверялись, без сообщения об ошибке..

Флажок html/(как пример)

<input type="checkbox" id="img1566"  class="merkzettel" name="merkzettel1566" value="img_1566.jpg"/>

ошибку не нахожу. У кого-нибудь есть идея? большое спасибо... Лиззи


я модифицировал скрипт, теперь один запрос запрашивает номера флажков, которые хранятся в бд, но у меня все еще проблема с оперой, т.е. 7, сафари и т.д.

может есть другой способ?

function checken (nummer){
    var elem = "#img" + nummer;
    $(elem).attr('checked',true);   

}


function start(){

    var url = "fileadmin/php/refreshCheckboxes.php?id=" + session_id;
    $.get(url,function(data){
        $.each(data.posts, function(i,data){
            //alert (data.number);
            checken (data.number);

        }); 
    });
 }

 $(".load").click(function()
 {
 start();
  return false;
  });

http://www.ruth-schuette.com/gesamtwerk/in-arbeit.html

Я очень благодарен за любую идею, теперь, когда я несколько дней работал над ней.


person lizzy    schedule 04.07.2011    source источник
comment
У вас опечатка в коде. В JSON это число:1553, но в коде data.nummer   -  person kgiannakakis    schedule 04.07.2011


Ответы (1)


Вы говорите, что JSON выглядит так:

{"checked":"unchecked","number":"1553"}

но ваш код ссылается на «число», а не на «число»:

checken (data.checked, data.nummer);

Пара замечаний:

  • Вы можете получить значение <input> с помощью ".val()":

    var name = $(this).val(); // or just this.value
    
  • Когда вы устанавливаете свойство «checked» для ввода «радио» или «флажок», вы можете просто использовать логическое значение, потому что браузер все равно будет интерпретировать значение так:

    $(elem).attr('checked', true);
    

редактировать ну, я не знаю, почему это не работает в Chrome. Кажется, что все HTTP-запросы выполняются, и ответы выглядят нормально, но обработчик успеха никогда не вызывается.

Я бы предположил, что даже если это сработает, это очень медленный способ получения этой информации. Было бы намного лучше, если бы вы могли выяснить, что проверяется в момент подготовки страницы, или, по крайней мере, иметь один вызов, который возвращает всю карту. Выполнение всех этих HTTP-запросов займет некоторое время.

person Pointy    schedule 04.07.2011
comment
Привет, Пойнти, номер / номер: это была ошибка прослушивания (?) Только в этой публикации. Я исправил ваши заметки. Моя проблема все еще выходит... - person lizzy; 04.07.2011
comment
Можете ли вы убедиться, что код в точности похож на код, который на самом деле работает? Трудно помочь, если я не вижу реальных вещей. Кроме того, вы говорите, что данные JSON имеют значение проверено как непроверенное; это тоже опечатка? Если нет, то оператор if в функции checken() ничего не допустит. - person Pointy; 04.07.2011
comment
Будет ли проще, когда я опубликую ссылку? ruth-schuette.com/gesamtwerk/auswahl-kopie-2.html вы должны поставить галочку напротив любого флажка в легенде Mappe, которая хранится в базе данных. При загрузке следующей страницы это будет проверено, и флажок должен быть активирован автоматически. - person lizzy; 04.07.2011
comment
Хорошо, теперь я вижу, но я не знаю (пока), почему это не работает в Chrome. - person Pointy; 04.07.2011
comment
да странно в IE8, firefox 5 все работает. нет в ie7, опере, сафари - person lizzy; 04.07.2011