Nette ajax a odeslání xhr
- kleinpetr
- Člen | 480
Ahoj,
chtěl jsem se zeptat zda mohu nějak poupravit xhr.send() tak aby o něm věděl nette.ajax, protože jinak se mi nepřekreslí snippety a v response mi přijde celé html..
// snažím se udělat jakousi upload komponentu, která odesílá ajaxově FILES a právě když je odešlu přes xhr, tak už nemůžu pracovat se snippety
Díky
- kleinpetr
- Člen | 480
Aha, díky..
jestli jsem to správně pochopil, tak když zaregistruju rozšíření tak
ho pak můžu volat jako
$.nette.upload()
jen nějak nechápu jak předat třeba právě ty
soubory.
Když to tak vezmu, tak mám teď nějakou fci která odesílá xhr
uploadFile = function(file,url){
var formData = new FormData();
formData.append('file', file);
var xhr = new XMLHttpRequest();
xhr.open("POST", url);
xhr.send(formData);
}
Jak to mohu přenést do toho rozšíření ?
Zatím to chápu tak, že mám přidané to rozšíření a teď budu místo té uploadFce volat
$.nette.upload({
url: url,
//ale jak mu předám ten 'file'?
});
P.S. Pravděpodobně jsem úplně v lese, ale pokud bude někdo tak ochotný a trochu mi toto téma upřesní tak budu rád, zatím jsem ten ajax nějak nepotřeboval řešit až do teď :)
Editoval kleinpetr (23. 11. 2015 17:12)
- kleinpetr
- Člen | 480
Zkouším něco takového:
$.nette.ext('upload', {
start: function(xhr,settings){
if(this.upload) {
var formData = new FormData();
$.each(this.files, function (i, file) {
formData.append(i, file);
});
// Open our connection using the POST method
xhr.open("POST", uploadUrl);
// Send the file
xhr.send(formData);
}
}
},{
upload: false,
files: null,
uploadUrl: null
});
použití:
$.nette.ajax({
upload: true,
files: files,
uploadUrl: url
});
Doufám, že jsem alespoň správně nasměrovaný, díky
- kleinpetr
- Člen | 480
Původně jsem chtěl, ale tam jsem měl ten samý problém s tím, že jsem nemohl posílat data přes nette.ajax tak jsem se rozhodl, že udělám kompletní vlastná uploader s doměnkou, že data bduu posílat ajaxem, když už jsem měl hotovou komponentu a přišlo na odesílání dat ajaxem, zjistil jsem, že to jde stejně jen přes xhr. Takže jsem na tom v podstatě stejně. Jen teď už mám kompletně svou komponentu kde vše funguje, jen potřebuji dořešit to přepsání snippetu po uploadu.. a abych mohl posílat flashmessages..
- kleinpetr
- Člen | 480
Zatím jsem to vyřešil takto:
uploadFiles = function (files, url) {
var formData = new FormData();
$.each(files, function(i, file) {
formData.append(i, file);
});
var xhr = new XMLHttpRequest();
xhr.onreadystatechange = function() {
if (xhr.readyState == 4 && xhr.status == 200) {
$.nette.ajax({
url: url
});
}
};
// Open our connection using the POST method
xhr.open("POST", url, true);
// Send the file
xhr.send(formData);
};
Samozřejmě jediné co to udělá, tak že aktualizuje snippet s nově nahranými soubory, ale pokud uplaod selže tak se to uživatel nedozví a bude mu tam běhat spinner do nekonečna. Asi by se to dalo vyřešit tím, že bych zavolal další metodu při jiném statusu než 200, ale to se mi prostě nelíbí.. rád bych to xhr zahrnul v nette.ajax
- Vojtěch Dobeš
- Gold Partner | 1316
Omlouvám se za velmi opožděnou reakci, ale neměl by
nette.ajax.js
podporovat odesílání souborů automaticky bez
dalšího rozšíření? Čeho přesně se snažíš docílit, že ti nefunguje
v základu?