асинхронная функция обратного вызова (JSON) не работает в опере, сафари и ie7 - PullRequest
0 голосов
/ 04 июля 2011

прошу прощения за мой плохой английский ..

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

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

скрипт:

$('.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"/>

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


я изменил скрипт, теперь одним запросом запрашиваю номера чекбоксов, которые хранятся в БД, но у меня все еще проблема с оперой, то есть 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

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

1 Ответ

1 голос
/ 04 июля 2011

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

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

но ваш код ссылается на "номер", а не на "номер":

checken (data.checked, data.nummer);

Пара заметок:

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

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

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

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...