Нет ответа при использовании AJAX и JSON - PullRequest
0 голосов
/ 26 июня 2011
function getIDs() {
alert("1");
var title = document.getElementById('title').value;
alert(title);
title = "http://www.imdbapi.com/?i=&t=" + title;
alert(title);
xmlhttp=new XMLHttpRequest();
alert("2");
xmlhttp.open("GET",title,true);
alert("3");
xmlhttp.send();
alert("4");
var imdbData = xmlhttp.responseText;
alert(imdbData);
var imdbJSON = JSON.parse(imdbData);
//document.getElementById('title').value = imdbJSON.Title;
alert(imdbJSON.Title);
document.getElementById('imdbid').value = imdbJSON.ID;
return true;
}

Я пытаюсь получить идентификатор фильма на основе его названия, функция вызывается успешно и предупреждения верны, пока предупреждение не возвращает «imdbData», которое возвращает пустое предупреждение, затем не болеепоявляются предупреждения, я не уверен, где я иду не так здесь.Любая помощь будет оценена.

Ответы [ 2 ]

1 голос
/ 26 июня 2011

Вы открываете его асинхронно. Чтобы сделать это синхронно, измените это:

xmlhttp.open("GET",title,true);

К этому:

xmlhttp.open("GET",title,false);

Обычно считается, что лучшим способом было бы заставить его работать с асинхронностью:

function getIDs() {
    alert("1");
    var title = document.getElementById('title').value;
    title = "http://www.imdbapi.com/?i=&t=" + title;
    xmlhttp=new XMLHttpRequest();
    xmlhttp.onreadystatechange=function() {
        if(xmlhttp.readyState==4) {
            var imdbData = xmlhttp.responseText;
            var imdbJSON = JSON.parse(imdbData);
            document.getElementById('title').value = imdbJSON.Title;
            document.getElementById('imdbid').value = imdbJSON.ID;
        }
    };
    xmlhttp.open("GET",title,true);
    xmlhttp.send();
    return true;
}

Кроме того, вы не можете запрашивать страницы из других доменов. Возможно, вам придется переключиться на JSONP, если используемый вами API его поддерживает, или использовать ваш веб-сервер в качестве прокси.

0 голосов
/ 26 июня 2011

Вы не можете выполнять межсайтовый скриптинг на JavaScript, поэтому ничего не получаете взамен. Вы должны быть в том же домене, в котором отправляете свой вызов AJAX.

Используйте серверный скрипт для анализа URL вместо вас.

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