2014-02-12 3 views
0

Я пытаюсь получить курс биткойнов с веб-сервера.Как получить данные json от сервера с jQuery mobile?

После этого мы пробуем его с JSON от местного, оно работает. В Firebug я вижу запрос на получение bitcoincharts.com, но ответа нет.

Что случилось с моим кодом?

$('#LitecoinMenue').append('<p><b>Litecoin: 42</b></p>'); 
$.getJSON('http://api.bitcoincharts.com/v1/weighted_prices.json', 
    function(data){ 
    $.each(data.USD, function(index,item){ 
     $('#BitcoinMenue').append('<p><b>Bitcoin:'+ item+'</b></p>'); 
    }); 
}); 

ответ

0

Причина ваш код не работает из-за правило называется Same-origin policy. Это правило требует, чтобы все запросы AJAX делались в файл с тем же именем домена. Невозможно использовать $.getJSON или любую другую функцию AJAX для загрузки файла из внешнего домена.

Доступно только несколько вариантов, наиболее распространенным является создание файла PHP для работы в качестве прокси-сервера и его сохранение в одном домене. Например:

proxy.php

<?php 
$url = base64_decode($_GET['url']); 
return file_get_contents($url); 
?> 

Ваша страница выше

$('#LitecoinMenue').append('<p><b>Litecoin: 42</b></p>'); 
$.getJSON('proxy.php?url=aHR0cDovL2FwaS5iaXRjb2luY2hhcnRzLmNvbS92MS93ZWlnaHRlZF9wcmljZXMuanNvbg==', 
    function(data){ 
    $.each(data.USD, function(index,item){ 
    $('#BitcoinMenue').append('<p><b>Bitcoin:'+ item+'</b></p>'); 
    }); 
}); 

Важные замечания:

Это просто пример. В реальной ситуации вы, вероятно, захотите использовать cURL для получения вашего файла. Вы также должны убедиться, что он защищен, так что кто-то не может использовать Firebug для отправки запроса AJAX для извлечения большого файла (например, фильма) или может произойти сбой вашего сервера.

Как вы можете видеть, URL-адрес кодируется base64. Это необходимо для правильной обработки, так как иногда возникают проблемы при передаче некодированного URL в качестве параметра GET. Вы можете кодировать и декодировать строки base64 с помощью этих онлайн-конверторов: http://base64encode.org и http://base64decode.org, или вы можете использовать встроенные функции PHP base64_encode() и base64_decode().

+0

Эй, танки для вашего ответа. Я пытаюсь создать приложение jQuery mobile/phonegab. Таким образом, нет никакого способа получить внешний json? php не представляется возможным. – user3302260

+0

Если вы нашли этот ответ полезным, отметьте его как принятый (зеленый галочка). –

+0

Почему я могу загружать фотографии кота из фликкера, а простой json - невозможно? http://demos.jquerymobile.com/1.0a1/experiments/api-viewer/docs/jQuery.getJSON/index.html – user3302260

Смежные вопросы