Все, ребята! Разобрался.
Я ошибку искал не там, где она есть на самом деле.
Все дело в том что у меня для передачи файла организованны методы класса. Надо было просто аккуратно разобраться с вложениями.
Вот как нужно было писать:
handler:function(){
if (this.readyState == 4){
if(this.status==200){
var a=this.responseText.substring(0,6);
if(a!=err) this.OnOk(this.responseText)
else this.OnFail(this.responseText);
};
if (this.status!=200){this.OnFail("Неудачная попытка связи.");}
}
},
SendFile:function(AFile,toFile,AOnOk,AOnFail){
if(!AOnOk) {this._ajax.OnOk=OnOkToContent;} else {this._ajax.OnOk=AOnOk;}
if(!AOnFail) {this._ajax.OnFail=OnFailToContent;} else {this._ajax.OnFail=AOnFail;}
r=new FileReader();
r.Parent=this;
r.onload=function(fLoad){
param=hnp()+'&FileName='+AFile.name+'&toFile='+toFile+'&FileContent='+fLoad.target.result;
this.Parent._ajax.open("POST",'Fload?',true);
this.Parent._ajax.onreadystatechange=this.Parent.handler;
this.Parent._ajax.sendAsBinary(param);
};
r.onerror=function(){alert("Ошибка. файл не загружен.");}
var con=r.readAsBinaryString(AFile);
},
А я писал a.onreadystatechange=handler;
Наивно полагая, что handler будет виден из Ридера
Глупо, блин, получилось...
Тогда если никто не против пожалуй последние два вопроса - У меня на форме в ячейке таблицы стоит
<td><input type="file" id="files" name="files[]" multiple class="inputtext" onchange="objppiska.ReadFile(event)"/></td>
Где
.inputtext {
width: 100%;
margin: 0;
padding: 0;
border: 0;
}
Однако эта зраза (input в смысле) не растягивается на всю ширь ячейки, оставляя лишь малюсенькое поле перед кнопкой, в котором не видно пути к файлу. Некрасиво смотрится. Можно ли заставить его растянуться на всю отведенный ему территорию ячейки?
И второй - Можно ли его заменить чем нибудь, что вызовет OpenDialog операционки, как делает этот тег, имеется ввиду может быть через JS вызвать этот диалог, получив имя файла? Или как вариант - скрыть с глаз этот инпут, вызывая в нужной функции его click?