Heim > php教程 > PHP开发 > Hauptteil

Beispiel für das Hochladen einer Aajx-Datei mit imitiertem Iframe-Effekt

高洛峰
Freigeben: 2016-12-06 14:59:43
Original
1237 Leute haben es durchsucht

Ich habe vor einiger Zeit viel Zeit damit verbracht, Ajax-Upload-Dateien zu lösen. Es ist definitiv kein Problem, Textinformationen direkt über $.post hochzuladen. Es ist jedoch nicht möglich, Bilder direkt in $.post hochzuladen.

Später habe ich einige Lösungen im Internet gesehen, darunter vorgefertigte Methoden zur Kapselung hochgeladener Ajax-Dateien und einige, die Flash verwenden. Flash ist in der Tat eine gute Methode, aber nicht jeder kennt Flash, und es ist nicht einfach, die heruntergeladene vorgefertigte Methode zu ändern, und die Datei ist relativ groß. Letztendlich musste ich Iframe simulieren, um dies zu erreichen. Finde es ganz einfach.

html:

<iframe name="ajaxUpload" style="display:none"></iframe>
<form name="from1" id="from1" method="post" action="url" enctype="multipart/form-data"target="ajaxUpload">
 <table>
  <tr>
    <td>附件:</td>
    <td><input type="file" id="document" name="document"/></td>
  </tr>
 </table>
 </form>
Nach dem Login kopieren

Hier ist der entscheidende Punkt. Zum Hochladen von Dateien ist das enctype-Attribut unerlässlich. Der Wert von target wird in den Wert des iframe-Namens geändert.

Schreiben Sie den folgenden js-Code. Ich verwende jQuery, daher ist es wichtig, die jquery-Bibliothek zu laden, wenn ich sie verwende.

$(function(){
     if($.browser.msie){
       window.form1.submit();}else{
       $("#form1").submit();}
    });
Nach dem Login kopieren

Hier ist eine Beurteilung der Browserversion, da IE ein Browser ist, der nicht den Spezifikationen entspricht, insbesondere IE6. IE6 unterstützt $("#idName").submit(); nicht direkt.

Die Serverseite ist wie folgt: Sie muss einen Wert zurückgeben. Die direkte Übermittlung kann keinen Wert zurückgeben.

public void Upload()
{
  HttpPostedBase ff=Request.Files["document"];//这里是获取上传的文件流,也可以用索引值来表示如果是多个文件的话
  string fileName=System.DateTime.Now+ff.FileName.ToString();  //这里取出来的文件名是没有后缀的,所以要保存的话还需要取出文件拓展名。这里就不写过细,只是为描述这样一个思路。
  try
  {
    SaveAs(documentPath+fileName+extendtionName);
    Response.Write("<script type=&#39;text/javascript&#39; type=&#39;language&#39;>parent.window.callBackMethod(&#39;上传成功&#39;);</scrpt>");
  }
  catch
  {
    Response.Write("<script type=&#39;text/javascript&#39; type=&#39;language&#39;>parent.window.callBackMethod(&#39;上传失败&#39;);</scrpt>"); //parent.window.methodName();这个是JS调用父页的方法。因为现在模拟一个iframe上传文件,这个iframe的作用就是一个中间站的作用。在父页点击上传后通过target会将页面文档流传入iframe中再上传服务端作处理。服务端有响应之后然后再在iframe里面显示出来,而不是直接在父页面显示出结果。这里可能就是一个alert()弹出一个对话框提示一下,如果是这样那么不调父页方法也行。如果想把这提示的内容丰富一点比如弹出个类似人人网的蓝色的对话框之类的。
   }
}
Nach dem Login kopieren

Simulation eines Iframes ist eigentlich Teil der Seitenaktualisierung, aber der Iframe auf der Seite hat keinen Inhalt und wird nicht angezeigt, sodass die Aktualisierung überhaupt keine Auswirkungen auf die gesamte Seite hat.

Verwandte Etiketten:
Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Empfehlungen
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage