Javascript-форум (https://javascript.ru/forum/)
-   Javascript под браузер (https://javascript.ru/forum/css-html/)
-   -   Uncaught SyntaxError: Unexpected token на мою голову (https://javascript.ru/forum/css-html/53601-uncaught-syntaxerror-unexpected-token-na-moyu-golovu.html)

glukon87 10.02.2015 16:17

Uncaught SyntaxError: Unexpected token на мою голову
 
Добрый день!

Собственно вот такая попытка забрать JSON с чужого домена:

function getSuggest(text){

    $.getJSON("http://www.lastfm.ru/search/autocomplete?callback=?",{"q" : text, "jsonp":"suggestCallBack"});

}

suggestCallBack = function (data) {
    console.log('data');
}


результат - Uncaught SyntaxError: Unexpected token

При этом удаленный сервер отдает верный JSON
(проверил линтером - jsonlint.com)
и заголовки - код ответа 200, application/json;charset=UTF-8

подскажите, где накосячил?:)

danik.js 10.02.2015 17:01

Цитата:

Сообщение от glukon87
При этом удаленный сервер отдает верный JSON

А должен отдать кусок js-кода с вызовом функции suggestCallBack и передачей ей параметром.

рони 10.02.2015 17:25

Цитата:

Сообщение от glukon87
При этом удаленный сервер отдает верный JSON
(проверил линтером - jsonlint.com)

похоже он обьект отдаёт а не JSON

Цитата:

Сообщение от glukon87
"q" : text

откуда text?

glukon87 10.02.2015 18:39

Цитата:

Сообщение от рони (Сообщение 356003)
откуда text?

text - строка, передается в качестве параметра (опечатка была)


А есть варианты прочесть то, что вернул их сервер?

Можно конечно дергать через backend прослойку, но хотелось бы обойтись javascript'ом )

danik.js 11.02.2015 04:50

Сервер возвращает JSON. При этом не выставляет заголовки, разрешающие кроссдоменный запрос. Так что без прокси никак.

рони 11.02.2015 08:03

Цитата:

Сообщение от danik.js
Сервер возвращает JSON.

странный какой-то JSON без кавычек вокруг чисел 1.0 и подобных и этот обьект спокойно перегоняется в JSON

Aetae 11.02.2015 09:00

danik.js, он наверное решил что достаточно отбалды дописать "callback=?" и будет ему счастье.)

glukon87 11.02.2015 10:26

Aetae, он решил, что раз видит во вкладке "Сеть" ответ от чужего сервака, да еще и содержащий запрошенные данные, значит их как-то можно скормить яваскрипту. видимо ошибся.

Подсказали такую ссылку - http://stackoverflow.com/questions/8...-jsonp-request

но не завелось.

danik.js, рони, спасибо! Значит буду перекладывать часть работы на php :)

danik.js 11.02.2015 12:28

Цитата:

Сообщение от glukon87
Подсказали такую ссылку
но не завелось.

Что не завелось? То, под чем написано:
Цитата:

I don't think this will work any better then OP's existing solution..?
? :)
А в следующем ответе как раз и объясняется в чем проблема:
Цитата:

The response from *** is JSON, not JSON-P. Accessing JSON-data this way is against the cross-site policies, as the browsers prevent such responses to be returned to the client.

glukon87 11.02.2015 12:55

danik.js, а эти данные, что видны в качестве ответа сервера, яваскрипту никак не доступны? т.е. не обязательно JSON , в крайнем случае мог бы и регулярками разобрать.

Aetae 11.02.2015 14:18

glukon87, никак.

glukon87 11.02.2015 14:55

Спасибо

DDim1000 15.10.2017 19:31

Вложений: 1
Подскажите пожалуйста, почему у меня такая же ошибка?

рони 15.10.2017 19:36

DDim1000,
oninput кавычки внутри одинарных только двойные или через слеш и наоборот внутри двойных однарные или через \

DDim1000 15.10.2017 20:01

А как заэкранировать двойные кавычки?
oninput="this.value = this.value.replace(/\D/g, "")"

рони 15.10.2017 20:20

Цитата:

Сообщение от DDim1000
А как заэкранировать двойные кавычки?

Цитата:

Сообщение от рони
внутри двойных однарные

:-?
oninput="this.value = this.value.replace(/\D/g, '')"
Цитата:

Сообщение от рони
или через \

oninput="this.value = this.value.replace(/\D/g, \"\")"

DDim1000 16.10.2017 13:56

Вложений: 2
Подскажите пожалуйста, что еще ни так в коде?

Nexus 16.10.2017 14:30

DDim1000, двойные кавычки замени апострофами в методе "replace".

рони 16.10.2017 16:14

Цитата:

Сообщение от DDim1000
что еще ни так в коде?

не вижу onclick, в котором ошибка


Часовой пояс GMT +3, время: 01:40.