Autor | Zpráva | ||
---|---|---|---|
destnik Profil |
Používám tuhle funkci pro načtení csv soborů. Protože potřebuju načíst několik souborů a z nich tvořit proměnné, potřebuji aby proměnná mohla spustit funkci z vlastní proměnnou. Co můžu udělat pro to aby se mi místo undefined vrátil stirng - obsah proměnné?
function nactiCSV(link) { $.ajax({ url: link, dataType: 'text', }).done( function suck(data) { console.log( data ); }) }; var zamestnanci = nactiCSV("https://dl.dropboxusercontent.com/s/11ofmbg4d4y3gb0/hovory_zakaznicke.csv"); console.log(zamestnanci); |
||
Chamurappi Profil |
#2 · Zasláno: 11. 10. 2016, 13:14:38
Reaguji na destnika:
Požadavek je asynchronní => skript běží dál, odpověď přijde později. Cokoliv potřebuješ s vrácenými daty provádět, prováděj v done callbacku. Je to podobné, jako kdybys chtěl znát souřadnici, kam uživatel kliknul – také bys nemohl mít funkci typu „počkej na klik a vrať mi X, Y“.
Krom toho konkrétně dl.dropboxusercontent.com je cizí doména (pokud je jiná, než na jaké běží stránka se skriptem) a prohlížeč ti nedovolí z ní stahovat.
|
||
destnik Profil |
#3 · Zasláno: 11. 10. 2016, 13:17:27
A jak docílím funnkce, která do nactiCSV pošle link a obratem vrátí globální proměnnou?
|
||
Chamurappi Profil |
#4 · Zasláno: 11. 10. 2016, 13:25:39
Reaguji na destnika:
Chyba je, že toho chceš docílit. HTTP komunikace vždy nějakou dobu trvá. Asynchronnost AJAXu sice jde vypnout, ale má to velmi negativní účinky na funkčnost prohlížeče (hrozí zásek). |
||
destnik Profil |
#5 · Zasláno: 11. 10. 2016, 13:28:26
A existuje jiná cesta jak z cizího servu načíst csv soubory a přiřadit je k proměnným?
|
||
Chamurappi Profil |
#6 · Zasláno: 11. 10. 2016, 13:30:59
Reaguji na destnika:
Z cizího serveru, pokud ti to ten server explicitně neumožní, nemůžeš JavaScriptem stahovat nijak, ani tím způsobem, který je uvedený v tvém kódu. Byla by to bezpečnostní díra. |
||
IdemeNaHavaj Profil |
destnik:
Kontroluj si intervalom či už je požiadavka dokončená. zamestnanci = ""; function nactiCSV(link) { $.ajax({ url: link, dataType: 'text', }).done( function suck(data) { zamestnanci = data; }) }; nactiCSV("https://dl.dropboxusercontent.com/s/11ofmbg4d4y3gb0/hovory_zakaznicke.csv" window.kontrolnyInterval = setInterval(function(){ if(zamestnanci.length > 1){ clearInterval(window.kontrolnyInterval); console.log(zamestnanci); } }, 10); takto by to mohlo fungovať |
||
Chamurappi Profil |
#8 · Zasláno: 11. 10. 2016, 14:10:34
Reaguji na IdemeNaHavaje:
Fuj. Proč nedat ten console.log(zamestnanci) rovnou do done ?
|
||
IdemeNaHavaj Profil |
#9 · Zasláno: 11. 10. 2016, 14:18:31
Chamurappi:
to je tiež pravda |
||
Časová prodleva: 8 let
|
0