В существующей литературе SO я видел примеры, которые используют jquery и PHP для прокси-данных:
JQuery
function loadTheUrl(x){
$.ajax({ url: 'loader.php',
data: {url: x},
type: 'get',
success: function(output) {
$('.loading-space').html(output);
}
});
}
PHP
<?php
$doc = new DOMDocument();
$doc->loadHTML(file_get_contents($_GET['https://www.google.com/finance/getprices?q=.NSEI&x=NSE&i=600&p=1d&f=d,o']));
echo $doc->saveHTML();
Вот как выглядят первые несколько строк данных по URL, указанному в PHP выше. Это страница простого текста, например:
MARKET_OPEN_MINUTE=570
MARKET_CLOSE_MINUTE=960
INTERVAL=300
COLUMNS=DATE,OPEN
DATA=
TIMEZONE_OFFSET=-240
a1521120900,555.45
1,554.53
2,554.07
3,553.9
4,552.67
...
Насколько я знаю, PHP правильный. Для моего случая использования мне нужно повторить вышеупомянутый jquery с помощью d3. Я надеялся, что у d3 будет что-то, что можно использовать для взаимодействия с данными, которые выкладывает мой php-файл.
Если вам интересно, почему я иду на такую длину, то это потому, что мои браузеры не позволяют мне запускать сценарии (т.е. d3.text()
, d3.csv()
эт все) прямо скажем d3.text('https://www.google.com/finance...')
из-за печально известной ошибки заголовка источника контроля доступа. Поэтому я планирую зеркально отразить данные из Google-засыпки в локальном php-файле, который я отправляю с моего сервера. Таким образом, все счастливы (или, по крайней мере, я).
Когда я пытаюсь позвонить d3.text()
в моем php-файле мои данные были загружены неправильно. Другими словами я пытался: d3.text('my_loader.php')
, Но это привело к большому количеству NaN
ошибки, которые я обычно замечал, являются признаками какой-то ошибки синтаксического анализа. Проверяя мой код, все выглядит хорошо. У меня одинарный разбор на месте, строки должны быть приведены к числам. На самом деле все работало нормально в автономном режиме. Я мог бы загружать и анализировать данные непосредственно, когда в моей IDE. Только когда я опубликовал свой график d3 в Интернете, я понял, что не могу проанализировать данные из разных источников. Это точка, где я добавил компонент PHP. Я догадывался, что d3
фактически пытался разобрать мою страницу PHP, а не URL, на который указывал PHP. Я позже подтвердил это, передав data
вернулся d3.text()
в консоли, и это действительно была сама страница PHP.
Вопрос: В свете моей ситуации с данными о происхождении, что я могу сделать из d3
сторона или PHP
сторона, чтобы сделать два интерфейса друг с другом правильно? Интересно, подходит ли d3 только для данных с одним и тем же происхождением, или же на самом деле существует метод для чтения / анализа данных из разных источников, используя технику, о которой я не знаю (PHP или иным образом).
URL, который вы выбираете, не существует в $_GET
переменная.
Параметры, которые вы отправляете, являются массивом:
$_GET = ['url' => 'some_url'];
Что означает это:
$_GET['https://www.google.com/finance/getprices?q=.NSEI&x=NSE&i=600&p=1d&f=d,o]
неправильно (также отсутствует знак кавычки в конце строки).
Так должно быть $_GET['url']
Без проверки:
<?php
header('Content-Type: text/plain');
echo file_get_contents($_GET['url']);
Но это ни здесь, ни там.
Проблема, я думаю, связана с передачей URL. Содержит знак вопроса и несколько амперсандов (?
а также &
). Я думаю, что это $_GET
параметр, так что все, что вы получаете, это https://www.google.com/finance/getprices?q=.NSEI
, Вы должны обернуть URL в encodeURIComponent
:
var url = encodeURIComponent('https://www.google.com/finance/getprices?q=.NSEI&x=NSE&i=600&p=1d&f=d,o');
d3.text('/path/to/myscript.php?url=' + url);
Перекрестное происхождение применяется ко всем запросам ajax вместо запроса d3.text (‘https://www.google.com/finance…’) почему бы не попробовать d3.text (‘ mymethod.php ‘) и убедиться, что метод возвращает текстовый файл, а не HTML через заголовки:
<?php
header('Content-Type: text/plain');
$file = file_get_contents('https://www.google.com/finance/getprices?q=.NSEI&x=NSE&i=600&p=1d&f=d,o');
echo $file;