У меня есть веб-сайт API, который я создал, и я хочу, чтобы мой javascript читал значения. У меня есть страница http://ec2-54-152-248-65.compute-1.amazonaws.com/temp/, на которой есть это:
{'records': [{'a': 'a'}]}
и я хочу, чтобы мой javascript читал его и конвертировал в JSON. У меня есть этот код до сих пор, и он не работает:
$http({
method: 'JSONP',
url: "http://ec2-54-152-248-65.compute-1.amazonaws.com/temp/"
}).success(function(response) {$scope.names = JSON.parse(JSONize(response.records));});
});
Есть ли у кого-нибудь теории о том, как я мог бы преобразовать это в JSON и прочитать его в своем веб-приложении, как что-то, что я могу повторить.
Это ошибка в моем console.log:
(index):1 Uncaught SyntaxError: Unexpected token :
Ваш ответ выглядит как неправильный ответ JSON, используется одинарная цитата вместо двойной кавычки, поэтому быстрое решение может быть:
$scope.names = JSON.parse(response.replace(/'/g, '"'));
Или исправить ваш серверный код, чтобы генерировать правильный ответ JSON.
JSONize
вы используете, но я думаю, что вам это не нужно, просто сделайте JSON.parse(response)
.
Вы смешиваете JSON и JSONP. У вас есть объект JSON, но вы вызываете его с помощью JSONP.
Чтобы избежать политики происхождения CROS, вам может потребоваться использовать JSONP. Чтобы вызвать ваш объект с помощью JSONP, вам необходимо обеспечить, чтобы объект был "вызываемым" через JSONP, и это означает, что вам нужно иметь формат:
mycallback({ foo: 'bar' });
Смотрите здесь, чтобы получить хорошее объяснение: что такое JSONP?
Вот что такое политика CROS: обеспечение доступа к данным из другого источника (домена), потому что вы имеете на это право, потому что вы как-то знаете, какую функцию инкапсулирует объект.
Просмотрев ваш код
$http({
method: 'JSONP',
url: "http://ec2-54-152-248-65.compute-1.amazonaws.com/temp/"
}).success(function(response) {
$scope.names = JSON.parse(JSONize(response.records));
});
});
вам следует
$scope.names = JSON.parse(JSONize(response)).records;
и если вы не хотите менять код на стороне сервера, сделайте то, что @MostafaR рекомендовал или использовал функцию eval. (для проблемы, вызванной из-за использованной одиночной кавычки вместо двойной кавычки)
$scope.names = eval( '(' + response + ')' ).records;