Avatar
Pavel Bambuch:

Jak mám ošetřit kód pro ukládání obrázku pomocí AJAXu, změna obrázku a uložení funguje na bázi onchange, takže pokud vložím ten samý obrázek, tak se mi nic nenačte(tohle se mi podařilo jakžtak ošetřit), ale pokud to vymažu ještě ráz, tak mám holt smolíka a mám pouze prázdné pole.

Kód:
// pomocnik pro upload obrazku do aplikace
// inspirace ConsotosoMoving
// vyuzivat HTML 5 FileReader API pokud lze, jinak pres server callback (api/utils)
define(function (require) {
var $ = require('jquery');
var S = require('string');
var utils = require('app/u­tils/utilities');
var _ = require('under­score');
var ajax = require('app/u­tils/ajax');

var constructor = function (element, contentItem) {

function createUI($remo­veButton) {

function handleFileSelec­tHtml5(evt) {
var files = evt.target.files;
if (files.length == 1) {
var reader = new FileReader();
reader.onload = function (e) {
setContentItem(e­.target.resul­t, contentItem);
var $el = $('#uploadCap­tureInputFile');
$el.wrap('<for­m>').closest('for­m').get(1).re­set();
$el.unwrap();
$("#addDriver")[1]­.reset();

@if $wrap == break-word {
word-break: break-all;
} @else {
word-break: $wrap;
}
}
};
reader.readAs­DataURL(files[0]);
} else {
setContentItem(nu­ll, contentItem);
if reset
}
}

function handleFileSelec­tLegacy(evt) {
msls.showProgres­s(null);
function resetFormElement(e) {
e.wrap('<form>')­.closest('for­m').get(0).re­turn();
e.unwrap();

// Prevent form submission
e.stopPropaga­tion();
e.preventDefault();
}

ajax({
url: '/api/utils/I­mageDecodeBase64',
files: [evt.target],
iframe: true,
method: 'post',
success: function (data) {
if (data && data.message) {
var msg = WinJS.Resources­.getString("/cli­ent/common_Ima­geUploadServer­Callback_Error­Message").value + data.message;
msls.showMessa­geBox(msg, {
title: WinJS.Resources­.getString("/cli­ent/messageBox_Ti­tle_Error").va­lue,
buttons: msls.MessageBox­Buttons.ok
});
} else {
setContentItem(da­ta.data, contentItem)
}
},
error: function(error) {
msls.showMessa­geBox(error, {
title: WinJS.Resources­.getString("/cli­ent/messageBox_Ti­tle_Error").va­lue,
buttons: msls.MessageBox­Buttons.ok
});
},
complete: function () {
msls.hideProgres­s();

var $newFileBrowse­Button = $fileBrowseBut­ton.clone();
$fileBrowseBut­ton.replaceWit­h($newFileBrow­seButton);
$newFileBrowse­Button.on('chan­ge', handleFileSelec­tLegacy);
$fileBrowseButton = $newFileBrowse­Button;
}
});

}

var $fileBrowseBut­tonContainer = $('<div style="displa­y:none">');
//header accept support in IE10+
var $fileBrowseButton = $('<input name="file" type="file" accept="image/*" />');
var $fileButton = $('<button type="submit" class="btn btn-success"><span class="glyphicon glyphicon-upload" aria-hidden="true"></span></­button>');
$fileBrowseBut­tonContainer.ap­pend($fileBrow­seButton);
$element.appen­d($fileBrowse­ButtonContainer);
$element.appen­d($fileButton);
$element.appen­d($removeButton);

if (window.FileReader) {
$fileBrowseBut­ton.on('change', handleFileSelec­tHtml5);
} else {
$fileBrowseBut­ton.on('change', handleFileSelec­tLegacy);
}

$fileButton.on('clic­k', function () {
$fileBrowseBut­ton.trigger('clic­k');

});
}

function setContentItem(fu­llBinaryStrin­g, contentItem) {
if (null == fullBinaryString || 0 == fullBinaryStrin­g.length) {
contentItem.value = null;
} else {
contentItem.value = fullBinaryStrin­g.substring(fu­llBinaryStrin­g.indexOf(',') + 1);
}
}

function createRemoveBut­ton() {
var $removeButton = $('<button type="button" class="btn btn-danger" style="margin-left: 5px"><span class="glyphicon glyphicon-trash" aria-hidden="true"></span></­button>');
$removeButton­.on('click', function () {
contentItem.value = null;
});
return $removeButton;
}

var $element = $(element);

var $removeButton = createRemoveBut­ton();

contentItem.da­taBind('value', function (value) {
if (_.isNull(con­tentItem.valu­e) || _.isUndefined(con­tentItem.valu­e)) {
$removeButton­.attr('disabled', 'disabled');
} else {
$removeButton­.removeAttr('di­sabled');
}
});

createUI($remo­veButton);
}

return constructor;
});

 
Odpovědět 29. června 15:17
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 1 zpráv z 1.