Преобразовать строку в JSON, используя чтение JavaScript с URL

0

У меня есть веб-сайт 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 :
  • 0
    Вы можете console.log (ответ) ответ, пожалуйста? у вас есть другое сообщение об ошибке?
  • 0
    что вы имеете в виду?
Показать ещё 7 комментариев

3 ответа

1

Ваш ответ выглядит как неправильный ответ JSON, используется одинарная цитата вместо двойной кавычки, поэтому быстрое решение может быть:

$scope.names = JSON.parse(response.replace(/'/g, '"'));

Или исправить ваш серверный код, чтобы генерировать правильный ответ JSON.

  • 0
    Я исправил это, чтобы иметь двойные кавычки, но это все еще дает ту же ошибку Uncaught SyntaxError: Неожиданный токен:
  • 1
    @Rob Я не знаю, какую функцию JSONize вы используете, но я думаю, что вам это не нужно, просто сделайте JSON.parse(response) .
Показать ещё 10 комментариев
0

Вы смешиваете JSON и JSONP. У вас есть объект JSON, но вы вызываете его с помощью JSONP.

Чтобы избежать политики происхождения CROS, вам может потребоваться использовать JSONP. Чтобы вызвать ваш объект с помощью JSONP, вам необходимо обеспечить, чтобы объект был "вызываемым" через JSONP, и это означает, что вам нужно иметь формат:

 mycallback({ foo: 'bar' });

Смотрите здесь, чтобы получить хорошее объяснение: что такое JSONP?

Вот что такое политика CROS: обеспечение доступа к данным из другого источника (домена), потому что вы имеете на это право, потому что вы как-то знаете, какую функцию инкапсулирует объект.

0

Просмотрев ваш код

$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;

Ещё вопросы

Сообщество Overcoder
Наверх
Меню