Странная проблема с версиями jquery, ajax и Internet Explorer - PullRequest
1 голос
/ 28 февраля 2012

Я сохраню как можно большую часть предыстории, но вот что я пытаюсь выяснить.

У меня есть два выпадающих списка, первый - список штатов, второй - школы в этом штате. Изменение выбора вызывает список школ с json и php.

Используя jquery 1.3.2, все отлично работает в Firefox и IE9. В IE8 я получаю синтаксическую ошибку, указывающую на цикл for, и скрипт не работает. Если я могу выяснить, в чем проблема с циклом for, и на самом деле может заставить скрипт работать с 1.3.2, это нормально.

Я пытался перейти на 1.4.4 или более новую версию jquery, и когда я это сделал, скрипт вообще не работает, ни в одном браузере, и в ходе исследований я не смог понять, почему.

Для чего бы то ни было, я также использовал getJSON вместо ajax, если это что-то меняет.

$(document).ready(function(){
  $("select#addr_state").change(function(){

    $.ajax({
        url: 'schools.php',
        dataType: 'json',
        cache: false,
        data: {id: $(this).val(), type: "list"},
        success: function(j){
            var options = '';
            for (var i = 0; i < j.length; i++) {
                options += "<option value='" + j[i].optionValue + "'>" + j[i].optionDisplay + "</option>";
            }
            $("select#school_id").html(options);
        }
    });     

  })
})

Для тех, кто хотел увидеть ошибку, он не позволил бы мне опубликовать скриншот в качестве нового участника. Я использую браузер стека для тестирования, и они используют CompanionJS. Я получаю только «Синтаксическая ошибка» в строке 41 (цикл for), затем в строке 42 «OptionValue» является нулем или не объектом », под этим есть ссылки на файл jquery.min.js, строка 19.

Заранее спасибо за любые ответы.

1 Ответ

0 голосов
/ 29 февраля 2012

Если вы измените:

options += "<option value=\"" + j[i].optionValue + "\">" + j[i].optionDisplay + "</option>"; 

до

options += "<option value='" + j[i].optionValue + "'>" + j[i].optionDisplay + "</option>"; 

это помогает?

РЕДАКТИРОВАТЬ: еще одна вещь, которую можно попробовать: us jQuery 1.7.1 и добавить / изменить на:

    dataType: 'jsonp',
    contentType: "application/json",

Справка по отладке: измените часть цикла for на: (проверьте, добавлен ли этот запуск и больше ничего)

var options = "<option value='start'>start</option>";
if (j){
    for (var i = 0; i < j.length; i++) {
        options += "<option value='" + j[i].optionValue + "'>" + j[i].optionDisplay + "</option>";
    }
}
$(options).appendTo("select#school_id");

РЕДАКТИРОВАТЬ: Тестовая страница с допущением правильно сформированных результатов: http://jsfiddle.net/MarkSchultheiss/m3A3w/

РЕДАКТИРОВАТЬ2: Еще одна вещь, которую вы МОЖЕТЕ сделать, это добавить json2.js (Google это) и сделать: Оповещение (JSON.stringify (J)); ВПРАВО в начале успеха: функция для проверки вашей структуры JSON.

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