JQuery getJSON/ajax не работает для моего внешнего URL, но для других

У меня есть этот код:

$.getJSON('http://www.reapp.se/cmesapp/cmes.json?callback=?', function(data){
    alert("disco");
}).error(function() {alert("fail!";});

Который отправляет предупреждение со словом «сбой» вместо «дискотека», и проблема заключается в URL-адресе, почему, я понятия не имею!

Это очень странно (кстати, это мой домен, так что это ошибка, которую я могу исправить), потому что я могу получить доступ к другим внешним доменам с помощью этого кода... Я могу добавить, что JSON проверен (проверьте сами) и что я искал... Это не работает с этим подходом:

jquery getJSON не работает с URL-адресом

Заранее спасибо!


person Johan S    schedule 20.01.2012    source источник
comment
Этот URL не возвращает JSONP. Если вы хотите использовать JSONP, сервер также должен его поддерживать.   -  person Felix Kling    schedule 20.01.2012


Ответы (2)


Я думаю, что ошибка в том, что URL-адрес не возвращает JSONP, а только JSON. Таким образом, jQuery будет сложно связать объект с вашим запросом.

Выполните код, который вы написали в Chrome, перейдите на вкладку «Сеть» и посмотрите ответ. Сделайте то же самое для http://api.jquery.com/jQuery.getJSON/, и вы будет видно, что позже ответ будет обернут примерно так: jQuery171043198914267122746_1327059063134({... code })

person Simon Edström    schedule 20.01.2012
comment
У меня не установлен Chrome на моем Ubuntu, вы его заработали? Да, я тоже читал о JSONP, но как мне изменить содержимое моего URL-адреса, чтобы он возвращал JSONP вместо JSON? - person Johan S; 20.01.2012
comment
Я не знаю, какой язык вы используете на стороне сервера. Но просто возьмите параметр ?callback из строки запроса и оберните весь ответ. Отметьте этот вопрос как ответ и создайте новый вопрос о том, как получить поддержку JSONP вашего ответа JSON. Кто-нибудь, может быть, хорошо даст вам пример, если вы укажете, какой язык вы используете на стороне сервера. - person Simon Edström; 20.01.2012
comment
Я не использую какой-либо серверный язык, кроме FTP, куда я перетащил файл cmes.json... Я здесь заблудился! На вопрос еще нет ответа, потому что мне интересно, чем отличается cmes.json от других файлов, с которыми он работает. - person Johan S; 20.01.2012
comment
Ну давайте так. Просто поместите это в начало вашего файла: jQuery (и добавьте дополнительный) в конце. После этого вам нужно заставить jQuery обрабатывать статический обратный вызов, посмотрите stackoverflow.com/questions/1608302/ (ваш обратный вызов должен быть jQuery) - person Simon Edström; 20.01.2012
comment
@Simon: Это переопределит глобальную функцию jQuery и, вероятно, не очень хорошая идея. Вместо этого используйте любое другое имя функции. @Reapp: просто используйте фиксированное имя обратного вызова и настройте вызов Ajax для использования этого имени. В документации jQuery есть много информации. - person Felix Kling; 20.01.2012

Хорошо, после долгих поисков я наконец нашел ответ!

Прежде чем продолжить, я должен использовать этот код для приложения для iphone, поэтому я не могу гарантировать, что следующее будет безопасным для разных браузеров.

Сначала я беру свой документ .json, размещенный на моем сервере, который является внешним по отношению к серверу, на котором работает этот код (в моем случае это телефон), и меняю его на .js (я не знаю, имеет ли это значение). Во-вторых, я помещаю весь объект JSON в скобки, а затем присваиваю его переменной, которую создаю, например так:

var v = (...JSON UNMODIFIED...);

Теперь переменная v является допустимой переменной javascript. После этого вы просто динамически импортируете скрипт в свой DOM (скажем, URL-адрес «http://www.disco.com/chabs.js»):

var head = document.getElementsByTagName('head')[0];
var jsonScript = document.createElement('script');
jsonScript.type = 'text/javascript';
jsonScript.src = 'http://www.disco.chabs.js';
jsonScript.onload = callback;
head.appendChild(jsonScript);

function callback(){
    //use v here as a js/json - object
}

Сначала я беру объект из DOM, а затем создаю новый элемент сценария. Затем я делаю элемент сценария javascript, устанавливаю источник на URL-адрес, и после завершения загрузки вызывается загрузка, это необходимо, иначе документ не будет загружен при вызове «v», наконец, я добавляю jsonScript к .

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

person Johan S    schedule 20.01.2012