2014-08-29 5 views
1

Я пытаюсь создать простую веб-приложение, используя перспективную библиотеку p5.js, но я застрял и не знаю, как двигаться вперед. Для меня это действительно загадка, почему следующие строки не работают. Я просто пытаюсь загрузить простой текстовый файл, и я не могу. Он продолжает говорить, что он пуст, когда, очевидно, это не так. Я не делаю ничего отличного от шоу default example на веб-сайте p5js.loadStrings() in Javascript error

Фактически я также попробовал пример по умолчанию, заменив строку для загрузки: http://quarx.asfa.gr/data.txt и ничего. Мой сервер показывает, что он отправляет строку ... Я не знаю, что делает p5js. Есть идеи? Ниже приведен код.

var result; 
var processedResult; 

function setup() { 
    createCanvas(windowWidth, windowHeight); 
    var URL = "http://quarx.asfa.gr/data.txt"; 
    result = loadStrings(URL, getHistoryState); 
} 

function draw() { 
    background(0); 
    ellipse(50, 50, 80, 80); 
    textSize(50); 
    text(processedResult, 300,300); 
} 

function getHistoryState() { 
    processedResult = result; 
} 
+1

Я предполагаю, что 'getHistoryState' является обратным вызовом. Он устанавливает 'обработанный результат'' result' до того, как 'result' получил какое-либо значение. Не зная ничего о p5.js, я предполагаю, что обратный вызов вызывается с параметром данных. Это то, что вам нужно установить для 'обработанныхResult' или' result'. – 2014-08-29 17:04:10

ответ

1

необходимо загрузить ваши данные из того же домена, что и ваш скрипт/страница, размещенная на.

взгляните на Same-Origin-Policy. особенно this table: enter image description here

+0

Вы правы. Я попробовал еще раз с файлом в том же домене, и он сработал. Но я не понимаю, хочу ли я использовать данные с другого сайта (используя, скажем, его API), как мне это сделать? Разве я не использовал бы одну из этих функций? После всего этого примера https://github.com/lmccart/p5.js/blob/master/examples/async/loadJSON_callback/sketch.js на документации p5.js загружает температуру города с другой страницы/другого домена и отображает значения на странице. Почему им разрешено это делать? Я заметил, что они делают это с помощью JSON. Это трюк? – user3578788

+1

loadJson, вероятно, может использовать jsonp. с помощью jsonp вы можете выполнять запросы на кросс-поиск. хотя это не работает для простого текста. много apis поддерживают jsonp. – dreamlab

0

Функция, которая рисует текст, draw(), вызывается с помощью API сразу после setup(), поэтому наиболее вероятно, до обратного вызова (getHistoryState()) имел возможность установить любое значение processedResult.

Либо добавить draw() в конце getHistoryState() как таковой:

function getHistoryState() { 
    processedResult = result; 
    draw(); 
} 

или просто избавиться от getHistoryState(), чтобы в конечном итоге с:

var result; 

function setup() { 
    createCanvas(windowWidth, windowHeight); 
    var URL = "http://quarx.asfa.gr/data.txt"; 
    result = loadStrings(URL, draw); 
} 

function draw() { 
    background(0); 
    ellipse(50, 50, 80, 80); 
    textSize(50); 
    text(result, 300,300); 
} 

Но в обоих случаях draw() мы будем называть дважды (после setup(), а затем через обратный вызов). Если это не то, что вы хотите, переименуйте draw() на что-то другое (или добавьте инструкцию в начале draw() для возврата, если processedResult/result по-прежнему пуст).

+0

Я попытался использовать этот пример https://github.com/lmccart/p5.js/blob/master/examples/async/loadJSON_preload/sketch.js точно так же, как он есть, просто заменив его URL-адресом моей службы (http: // terataki.x64.me/history/), но он возвращает ошибку в строке loadJSON, в которой говорится: «SyntaxError: missing; before statement» Любые идеи, о чем это может быть? – user3578788