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
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
A jak docílím funnkce, která do nactiCSV pošle link a obratem vrátí globální proměnnou?
Chamurappi
Profil
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
A existuje jiná cesta jak z cizího servu načíst csv soubory a přiřadit je k proměnným?
Chamurappi
Profil
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
Reaguji na IdemeNaHavaje:
Fuj. Proč nedat ten console.log(zamestnanci) rovnou do done?
IdemeNaHavaj
Profil
Chamurappi:
to je tiež pravda

Vaše odpověď

Mohlo by se hodit

Neumíte-li správně určit příčinu chyby, vkládejte odkazy na živé ukázky.
Užíváte-li nějakou cizí knihovnu, ukažte odpovídajícím, kde jste ji vzali.

Užitečné odkazy:

Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm: