2015-11-14 4 views
2

Я пытаюсь получить данные через Ajax вызов:Параметры обратного вызова messing up ajax call?

$.ajax({ 
    url: "http://services.runescape.com/m=itemdb_rs/api/catalogue/detail.json?item=1048", 
    type: "GET", 
    dataType: "jsonp", 
    success: function(data){ 
     console.log(data.item.name); 

    }, 
    error: function (err) { 
     console.log("AJAX error in request: " + JSON.stringify(err, null, 2)); 
    } 

}); 

Потому что это апи третьей стороны, я просто JSONP. Проблема в том, что я получаю синтаксическую ошибку: «Uncaught SyntaxError: Неожиданный токен:».

Когда я смотрю в консоли, я вижу данные, но он продолжает говорить Неожиданный токен:, так что я не могу видеть данные

Теперь, когда я нажимаю и перейдите к URL, можно просмотреть данные (так что URL-адрес runescape)

Что я делаю неправильно?

+0

Вы по-прежнему получаете сообщение об ошибке, если вы добавите console.log в комментарии? – Elentriel

+0

да, ничего не меняет – Eselko

+0

Вы говорите: «Когда я смотрю в консоли, я вижу данные», поэтому звучит так, как будто ваша функция действительно работает нормально ... может ли ошибка быть другим кодом, который вы пытаетесь запустить сразу после этого? –

ответ

3

"Uncaught SyntaxError: Unexpected token :".

звучит как третья сторона API не поддерживает JSONP, так как это ошибка при попытке обработать JSON, как если бы это были JSONP. Помните, что JSONP требует, чтобы оба конца сотрудничать.

Посмотрите на документацию для API, о которой идет речь, она может не поддерживать JSONP, может поддерживать ее через другую конечную точку, может потребоваться параметр, указывающий, что вы хотите JSONP (хотя обычно они просто ищут параметр запроса callback, который jQuery автоматически добавит) и т. д.

Просто для полноты: причина, по которой серверная сторона должна знать, что происходит, заключается в том, что ей нужно отправить другой ответ. Вот пример JSON ответ:

{"someProperty":"someValue"} 

Вот версия JSONP этого:

someFunctionName({"someProperty":"someValue"}) 

... где someFunctionName определяются вызывающих, с помощью параметра запроса. Сервер должен искать параметр и использовать его при генерации ответа. Это связано с тем, что JSONP не является ajax, строго говоря, поэтому он не подпадает под SOP, который обычно управляет вызовами ajax.

+0

Согласовано - если вы перейдете на страницу http://services.runescape.com/m=itemdb_rs/ api/catalog/detail.json? item = 1048 в браузере вы получаете JSON, а не ответ JSONP, и то же самое происходит, даже если вы включаете обратный вызов, например http://services.runescape.com/m=itemdb_rs/api/catalogue/detail.json?item=1048&callback=test –

+0

Когда я пытаюсь использовать обычный json в вызове ajax, при этом url является скриптом php, который использует file_get_contents of URL-адрес runescape, загрузка занимает более 30 секунд, как я могу это разрешить? – Eselko

+0

@ Эселько: Это вопрос, который не связан. Я предлагаю опубликовать его как вопрос с тегом php и другими релевантными. –