AJAX JSON дамп как массив - PullRequest
       12

AJAX JSON дамп как массив

0 голосов
/ 29 декабря 2011

У меня есть простой скрипт ajax, который возвращает дамп json с сервера:

var request = false;
try {
request = new XMLHttpRequest();
} catch (trymicrosoft) {
try {
    request = new ActiveXObject("Msxml2.XMLHTTP");
} catch (othermicrosoft) {
    try {
        request = new ActiveXObject("Microsoft.XMLHTTP");
    } catch (failed) {
        request = false;
    }
  }
}

function getIslandName() {
    var islandGroup = document.getElementById("id_island_group").value;
    var url = ".../find_island?island_group=" +  escape(islandGroup);
    request.open("GET", url, true);
    request.onreadystatechange = updatePage;
    request.send(null);
} 

function updatePage() {   
    if (request.readyState == 4)    
        if (request.status == 200)
            var data = JSON.decode(request.responseText);
            update(data);
            //document.getElementById("ajax_response").innerHTML = request.responseText;
        else if (request.status == 404)
            alert("Request URL does not exist");
        else
            alert("Error: status code is " + request.status);
}   


function update(data) {
    for (var key in data) {
        alert(data[key]);
    }
}

Проблема, похоже, в функции updatePage(). Если я раскомментирую эту строку:

//document.getElementById("ajax_response").innerHTML = request.responseText;

ответный текст JSON-дамп отображается, как и ожидалось. e.g.:

["Foo Island", "Bar Island", "Darwin Island"]

Также, если я создам новый массив данных в функции updatePage() следующим образом:

function updatePage() {   
var string = "Something something ajax";
if (request.readyState == 4)
if (request.status == 200)
        var data=new Array(); 
        data[0]="Foo Island";       
        data[1]="Bar Island";
        data[2]="Darwin Island";
        update(data);
}

Функция update() работает, как ожидается, и выдает ожидаемый вывод предупреждения.

Любые предложения относительно того, что я делаю неправильно, будут высоко оценены.

...