jQuery Mobile -> Загрузка контента с внешнего сервера - PullRequest
1 голос
/ 04 марта 2012

Я работаю над, казалось бы, базовым мобильным приложением (сначала). Но я хочу, чтобы приложение запрашивало информацию с нашего «головного» сервера. Чтобы убедиться, что он имеет самую последнюю информацию.

В настоящее время я запускаю скрипт jQuery, как этот.

$.ajax({
        url: 'http://www.domain.com/list.php',
        dataType: 'json',
        crossDomain: true,
        success: function(data) {

            // Remove all content first
            $(contentId +' li').remove();

            // Load Data
            $.each(data.items, function(index, list){
                $(contentId).append('<li><a href="details.html?id=' + list.homeId + '" >' + list.name + '</a></li>\n');
            });

            // Reload View
            $(contentId).listview('refresh');

        }, 
        error: function(jqXHR, textStatus, errorThrown) {
            console.log('Error: '+ jqXHR + textStatus + errorThrown);
        }
    });

И на самом деле в этом файле LIST.PHP он возвращает строку JSON. Но то, что я сделал для безопасности, добавив это как заголовок

header("Access-Control-Allow-Origin: *");

Или я мог бы изменить * на домен / URL, чтобы повысить безопасность. Но если я не добавлю этот код header () к ним, мой javascript будет поврежден и не будет работать должным образом.

Я думаю, что мне действительно интересно, я делаю это правильно? или есть лучший способ сделать это? Я пробовал JSONP, но я не могу заставить его работать для междоменного домена.

Мое решение озвучено? или полная хрень? Любые мысли или направления будут с благодарностью!

1 Ответ

1 голос
/ 04 марта 2012

Я думаю, вы должны посмотреть на JSONP.Это не так сложно.На стороне клиента jQuery уже обрабатывает его из коробки, просто добавьте ?callback=? к URL.На сервере вместо простого ответа JSON, например:

{
  "foo": "bar"
}

Найдите параметр запроса callback, и, если он существует, оберните вывод JSON в вызов функции с именем, являющимся значениемпараметра обратного вызова, поэтому для callback=foo:

foo({
  "foo": "bar"
})

При ответе с помощью JSONP отправьте Content-Type: text/javascript.Это должно работать без установки Access-Control-Allow-Origin или чего-либо подобного.

...