2014-05-22 2 views
0

처리 js를 사용하여 연결 처리 javascript 처리를 시도하고 있지만 작동하지 않습니다. 처리 스케치는 웹 사이트에는 표시되지만 정보가있는 그래픽에는 표시되지 않습니다.처리 js + javascript + 처리

자바 스크립트 :

var base_url = "http://ws.audioscrobbler.com/2.0/"; 


var apikey = "***"; 

var base_request = "****"; 

var username; 

var procura; 
var getUserInfo; 
var searching; 
var log; 

var proc; 
var bound=false; 

var listaArtistas = []; 
var listaArtistasOther = []; 




$(document).ready(function() { 


    $("#pjs").hide(); 

    $("#go").click(function() { 
     procura(); 


     //alert("go"); 

     $("#artists").click(function() { 
      buscarArtistas("#search-text", false); 
      buscarTracks(); 

      bindJavascript(listaArtistas); 

      //alert("artists"); 
     }); 

     $("#compare").click(function() { 
      buscarArtistas("#search-text", false); 
      buscarArtistas("#search-user", true); 
      //alert("compare"); 
     }); 
    }); 
}); 


function bindJavascript(listaArtistas){ 



     proc = Processing.getInstanceById('pjs'); 
     $("#pjs").show(); 


    if(proc!=null){ 

    proc.bindJavascript(this); 
    proc.legenda(listaArtistas); 
     bound=true; 

    }else if(!bound){ 

     setTimout(bindJavascript,250); 

    } 

    bindJavascript(); 

} 


function buscarArtistas(id, isOther) { 
    username = $(id).val(); 
    searching(); 
    getUserTopArtists(username, isOther); 
    // alert("buscarArtistas"); 
} 

function buscarTracks() { 
    username = $("#search-text").val(); 
    searching(); 
    getUserTracks(); 
    //alert("buscarTracks"); 

} 



function procura() { 
    username = $("#search-text").val(); 
    searching(); 
    getUserInfo(); 
    //alert("procura"); 
} 

function getUserInfo() { 
    var data = { 
     api_key: apikey, 
     method: "user.getInfo", 
     user: username, 
     format: "json" 
    }; 
    $.ajax({ 
     url: base_url, 
     data: data, 
     success: processUserInfo 
    });  
    //alert("getUserInfo"); 
} 

function getUserTopArtists(user_, isOther) { 
    var data_ = { 
     api_key: apikey, 
     method: "user.getTopArtists", 
     user: user_, 
     limit: 20, 
     format: "json"   
    };  
    $.ajax({ 
     url: base_url, 
     data: data_, 
     async: false, 
     success: function (info) { 
      processUserTopArtists(info, isOther); 

      if (isOther) { 
       comparar(); 
      } 
     }, 
     error: function(XMLHttpRequest, textStatus, errorThrown) { 

     } 
    });  
    //alert("getUserTopArtists"); 
} 



function processUserInfo(info) {  
    if (info.error) {   
     log("User " + username + " doesn´t exist or the field is empty<br/>Try again...");  
     return; 
    }  
    username = info.user.name; 
    var realname = info.user.realname, 
     pais = info.user.country, 
     age = info.user.age, 
     genero = info.user.gender, 
     playlist = info.user.playlists; 
    $("#profile").html("Username: " + username + " <br>Name:" + realname + " <br> Country:" + pais + " <br> Age:" + age + " <br> Gender:" + genero + "<br>Playlists:" + playlist + "<br/><table></table>");  
    //alert("processUserInfo"); 
} 

function processUserTopArtists(info, isOther) { 


    $.each(info.topartists.artist, function(index, artist) { 
     if (isOther) { 
      listaArtistasOther[index] = artist.name; 


     } else { 

     listaArtistas[index] = artist.name; 


      $("#artistas").append("Artist: " + artist.name + "<br/>"); 

      //proc.funcao(listaArtistas[index]); 

     } 


    }); 

    //alert("processUserTopArtists");  
} 

function comparar() { 

    //alert ("lista art " + listaArtistas); 
    //alert ("lista art Other " + listaArtistasOther); 

    $.each(listaArtistas, function(index, item) { 
     var index = $.inArray(item, listaArtistasOther); 
     if (index >= 0) { 
      $("#artistas2").append("Name: " + item + "<br/>"); 
     } 
    }); 

    //alert("comparar"); 
} 

function getUserTracks() {  
    var data_ = { 
     api_key: apikey, 
     method: "user.getTopTracks", 
     user: username, 
     limit: 100, 
     format: "json"   
    }; 

    // alert ("getUserTracks"); 

$.ajax({ 
     url: base_url, 
     data: data_, 
     success: function (info) { 
     processUserTopTracks(info); 
     } 

    });  

    //alert("Estou aqui"); 
} 

function processUserTopTracks(info){  
    $.each(info.toptracks.track, function(index, track) { 
     var track = track.name;   
     $("#tracks").append("Track: " + track + "<br/>"); 
    }); 
    //alert("aqui"); 
} 

function searching() {  
    $("#status").empty(); 
    //alert("searching"); 
} 
function log(message) { 
    $("#status").append(message + "<br/>");  
    //alert("log"); 
} 

처리 파일 :

JavaScript js; 

int planetsnum=4; 
float ang=PI/4; 
Stars [] star; 
float [][] angsincs=new float [2][planetsnum]; 
color[] corplanetas=new color[planetsnum]; 


PFont font; 
int totalStars=0; 


void legenda(String [] l){ 

    totalStars=0; 

    String [] listaArtistas ={"",""}; 

    star= new Stars[totalStars]; 

    font = createFont("Courier New",12); 


    for(int i=0; i<l.length; i++){ 



    listaArtistas[i]=l[i]; 

    star[i]= new Stars(new PVector(random(40,820),random(40,360)),20, planetsnum,listaArtistas[i],0); 
totalStars++; 



    } 
    for(int w=0; w<planetsnum; w++){ 

    angsincs[0][w]=random(TWO_PI); 
     angsincs[1][w]=random(0.00001, 0.0001); 

     corplanetas[w]=color(random(50,255),random(50,255),random(50,255)); 
} 


} 

void setup(){ 

size(900,400); 


} 

void draw(){ 

background(0); 


    for(int i=0; i<totalStars; i++){ 
    for(int j=0; j<totalStars; j++){ 

    if (j > i) { 

    if(star[i].VerificaColisaoDeBolas(star[j])){ 
    star[j].localizacao.x=star[j].localizacao.x+ star[j].r; 
     star[j].localizacao.y=star[j].localizacao.y+ star[j].r; 
} 
} 
} 
} 
for(int i=0; i<totalStars; i++){ 
    star[i].displayStar(); 

    star[i].limites(); 

    for(int w=0; w<star[i].planetnum; w++){ 

    int raio=(w+1)*40; 

    float a= star[i].localizacao.x+(raio/2)*cos(angsincs[0][w]); 
    float b=star[i].localizacao.y+(raio/2)*sin(angsincs[0][w]); 




    planetas(star[i].localizacao.x,star[i].localizacao.y,a,b,raio,corplanetas[w]); 


angsincs[0][w]=angsincs[0][w]+angsincs[1][w]; 
    } 
    } 

    cimaEstrela(); 

} 


void cimaEstrela(){ 

    PVector localizacaoRato = new PVector(mouseX, mouseY); 


    for(int i =0; i<totalStars;i++){ 

    if(star[i].localizacao.dist(localizacaoRato) <= star[i].r){ 

    star[i].d=255; 


    }else{ 

    star[i].d=0; 

    } 
} 
} 


void planetas(float x,float y,float a1,float b1,int r2,color c){ 

    stroke(100); 
     noFill(); 
     ellipse(x,y,r2,r2); 

     fill(c); 
     ellipse(a1,b1,10,10); 
} 

class Stars{ 

    float r; 
    PVector localizacao; 
    int planetnum; 
    String s; 
    int d; 


Stars(PVector tempXY, float tempR, int tempplanetnum, String temps, int tempd) { 
    localizacao = tempXY; 
    r=tempR; 
    planetnum=tempplanetnum; 
    d=tempd; 
    s=temps; 


    } 

    void displayStar() { 


    fill(255,d); 
    text(s,localizacao.x+r, localizacao.y); 


} 

boolean VerificaColisaoDeBolas(Stars outraStars) { 
    float distanciaX = localizacao.dist((outraStars.localizacao)); 

    if (distanciaX < (r + outraStars.r)) { 


     return true; 
    } 
    return false; 
    } 

    void limites() { 

    if ((localizacao.x+(r)) > width) { 
     localizacao.x = width - (r); 

    } 
    else if ((localizacao.x-(r)) < 0) { 
     localizacao.x = (r); 

    } 
    else if ((localizacao.y + (r)) > height) { 
     localizacao.y = height - (r); 

    } 
    else if ((localizacao.y -(r)) < 0) { 
     localizacao.y = r; 

    } 
    } 

} 

interface JavaScript {} 

void bindJavascript(JavaScript script) { 
js = script; 
} 

어떤 생각을하는 방법이 작업을 수행하기 위해? 미리 감사드립니다.

+0

많은 코드와 설명이 있습니다. 정확히 무엇을 시도 했습니까? 예상대로 작동하지 않는 단계는 어디입니까?버그의 원인이되는 부분을 분리하면 되돌아 와서 해결할 수 있습니다. :) – Winchestro

+0

그래서 마지막 아티스트의 말로 듣는 top20 아티스트의 목록이 있습니다. 태양계 나는 aritsts 목록의 길이를 읽고 클래스의 construtor에 20 개의 별을 그리려고하므로 javascript 파일에있는 정보를 처리하는 데 필요한 파일을 처리해야합니다. legenda 함수로 수행 – user3527705

+0

하지만 버그의 원인은 무엇입니까? 심지어 작동하지 않는 것은 무엇입니까? 당신은 "스케치가 등장했지만 정보가있는 그래픽은 아닙니다"라고 말했지만 "정보가있는 그래픽"이 무엇을 의미하는지 어떻게 알 수 있습니까? 아무것도 될 수 있습니다 ^^ – Winchestro

답변

1

좋아, 문제는 file : // 프로토콜에서 로컬로 웹 사이트를 볼 때 로컬 파일 (XMLHttpRequests, 짧은 XHR 보내기)을 읽을 수 없다는 것입니다. 그 이유는 아마도 다른 사람들을 속여 웹 사이트를 로컬로 열어서 쉽게 추측 할 수 있고 그런 다음 모든 파일에 액세스 할 수 있기 때문일 수 있습니다.

이 문제를 해결할 수있는 방법은 많습니다. 예를 들어 processing.js 스케치를 자바 스크립트 모드로 테스트 할 때처럼 처리하는 것처럼 로컬 서버를 실행하는 것이 가장 쉽습니다. 또한 처리 과정에서 기본 템플릿 대신로드 할 고유 html/js/ccc를 정의 할 수 있습니다. 어쩌면 이것도 빠른 해결책이 될 수 있습니다.

JavaScript로 처리 모드를 실행하면 필요한 모든 옵션을 찾을 수 있습니다. 그런 다음 템플릿과 서버 설정을 정의 할 수있는 JavaScript 메뉴가 있습니다.

또 다른 방법은 어딘가에 업로드하는 것입니다. (이 접근법은 스마트 폰/태블릿 등의 다른 장치에서 쉽게 테스트 할 수있는 이점이 있습니다.

  • Google 드라이브/드롭 박스는
  • 텀블러는 정적 콘텐츠를 호스팅하는 웹 사이트와 같은 정적 콘텐츠를 호스팅 할 수 있도록

    하지만 그것은
  • Github에서이 같은 작업을 수행 할 수 있습니다 첫 번째 옵션보다 유지하기 위해 좀 더 번거 로움 하지만 지금까지 한번도 직접 시도한 적이 없으므로 정확히 어떻게 설정했는지 말할 수는 없습니다.
  • Heroku는 서버 측 스크립팅을 일부 수행하려는 경우에 대비하여 소규모 프로젝트의 경우 동적 인 컨텐츠를 무료로 호스팅합니다.

다른 도메인에서 파일을 요청하는 경우 XHR은 서버에서 특별히 허용하지 않는 한 브라우저에서 기본적으로 차단되므로 XHR도 실패 할 수 있습니다. 이것은 클라이언트 측 스크립트에서 이러한 요청을 보내는 경우 문제가됩니다. 다시 말하면 사람들이 과거에 해킹을 많이 한 것 같은 위험한 지형이기 때문입니다.

그것은 아주 복잡한 주제이고 나는 그에게 정의를 할 수있는 방법은 없지만, 경우에 당신이 "CORS"와 "XHR"그것에 대해 더 읽고 싶어 구글 좋은 키워드입니다.