2016-05-22 1 views
0

Contexte:demandes inter-domaines - javascript

Je crée une application Web pour télécharger et prix des logements d'affichage. Source des données: http://www.fhfa.gov/DataTools/Downloads/Documents/HPI/HPI_AT_metro.csv

Mon plan:

Télécharger les données directement à partir du lien en utilisant javascript, puis transformer les données dans un objet javascript (éventuellement en utilisant jQuery-csv). Après cela, j'utiliserais DataTables ou une autre bibliothèque javascript pour afficher les données.

Là où je suis resté bloqué:

Après quelques recherches, il semble faire cela porte atteinte à la « politique d'origine ». D'après ce que j'ai lu, il n'est pas acceptable de télécharger des données provenant de sources externes en javascript.

Questions:

  1. Ai-je raison? Le téléchargement d'un .csv à partir d'une source de données externe est-il contraire à la "politique d'origine identique"? Si je ne me trompe pas, les morceaux de code requis pour télécharger le fichier .csv à partir du lien ci-dessus et le convertir en un objet javascript (de préférence en utilisant jQuery) seraient extrêmement utiles. Si je me trompe, pourquoi le téléchargement d'un fichier .csv externe constitue-t-il une violation de cette politique, alors que le fait de rechercher une image externe à utiliser dans un site Web ne constitue pas une violation de cette politique? Par exemple.

<img src="http://www.freeflashgamearcade.com/games/images/tic-tac-toe.jpg">

http://www.freeflashgamearcade.com/games/images/tic-tac-toe.jpg

Notes:

J'espère que de le faire de cette façon, donc je peux éviter d'utiliser un langage complètement côté serveur. Si cela ne fonctionne pas, je prévois de configurer l'application en utilisant python/flask, qui ne serait utilisé que pour télécharger les données.

+0

Il n'est pas possible de télécharger un fichier via une requête AJAX, donc je ne vois pas comment ce que vous décrivez violerait la SOP. Cela dit, je ne vois pas non plus comment cela pourrait fonctionner lorsque vous téléchargerez le fichier sur la machine cliente afin qu'il soit alors inaccessible à votre code JS. –

+0

@RoryMcCrossan pas vraiment vrai concernant le téléchargement. par exemple '' attribut de téléchargement, 'FileSaver' API etc – charlietfl

+1

Peut utiliser proxy sur votre propre serveur pour récupérer les données, puis ajax à votre proxy. Ou utilisez un service de proxy tiers comme YQL – charlietfl

Répondre

1

Il y a quelques problèmes avec le projet que vous souhaitez atteindre:

  1. Vous ne pouvez pas utiliser une requête AJAX pour télécharger un fichier tiers ou récupérer des données en raison de la politique CORS. Parfois, un site web permet de partager ses ressources et dans ce cas, il est possible d'obtenir des données tierces via AJAX. (https://developer.mozilla.org/en-US/docs/Web/HTTP/Access_control_CORS)

  2. Même si vous pouviez télécharger le fichier CSV, vous devez l'analyser pour afficher les données et puisque vous utilisez JavaScript, vous le téléchargerez sur l'ordinateur client, puis vous aurez besoin de accéder à ce qui n'est pas possible.(Vous ne pouvez pas accéder à des fichiers système à partir du Javascript [plus de détails peuvent être trouvés ici: Local file access with javascript)

1

vous ne pouvez pas faire une demande ajax à une autre source qui n'est pas votre serveur parce que cela viole la politique de demande croisée origine le navigateur.

Vous pouvez faire deux choses. utilisez la solution python et autorisez CORS à faire la requête ajax sans problème de politique de navigateur. parce que vous permettez à votre serveur d'accepter ce type de demande. puis l'obtenir la demande ajax comme ce

$.ajax({ 
    type: "get", 
    url: "mypythonresource.com/Documents/HPI/HPI_AT_metro.csv" 
    success: function(response){ 
    // response will be a string that cointains the CSV data separed by ';' 
    } 
}); 

OU l'autre chose que vous pouvez faire est de faire une étiquette et après les utilisateurs téléchargent la ressource leur montrer une fenêtre modale pour re-envoie à votre application