この記事では主に、PHP と HTML5 FormData を使用して更新不要のファイル アップロードを実装するチュートリアルを紹介します。この記事では、最初にプログラムの作成手順を詳しく説明し、最後に必要な方は参照できるように完全な例を示します。更新せずにアップロードするのが一般的です。 このやや複雑な問題に対する一般的な解決策は、iframe を構築することです。
HTML5 では、FormData オブジェクト API が提供されており、FormData を通じてフォーム リクエストを簡単に構築し、XMLHttpRequest を通じて送信できます。 FormData オブジェクトを通じてファイルを送信することもできるため、更新せずにアップロードすることが非常に簡単になります。
では、FormData を使用するにはどうすればよいでしょうか? Script House はこれについて以下に簡単に紹介します。
1. FormData オブジェクトを構築しますFormData オブジェクトを取得するのは非常に簡単です:
var fd = new FormData();
FormData オブジェクトは、フォーム リクエスト パラメーターを物体。
現在主流のブラウザでは、次の 2 つの方法で FormData を取得または変更できます。方法 1: 空の FormData オブジェクトを作成し、append メソッドを使用してキーと値のペアを 1 つずつ追加します。例:
var fd = new FormData(); fd.append("name", "脚本之家"); fd.append("blog", "http://jb51.net"); fd.append("file", document.getElementById("file"));
このメソッドは、HTML フォーム オブジェクトの存在を必要としません。
方法 2: フォーム要素オブジェクトを取得し、それをパラメーターとして FormData オブジェクトに渡します。例:var formobj = document.getElementById("form"); var fd = new FormData(formobj);
もちろん、append メソッドを使用して他のパラメータを fd に追加し続けることもできます。
2. FormData はリクエストを送信しますFormData オブジェクトを用意したので、どのようにリクエストを送信すればよいでしょうか? FormData オブジェクトは主に、拡張された XMLHttpRequest オブジェクトの send メソッドで使用されます。次の例を参照してください:
var xhr = new XMLHttpRequest(); xhr.open("POST" ,"http://jb51.net" , true); xhr.send(fd); xhr.onload = function(e) { if (this.status == 200) { alert(this.responseText); } };
jQuery の ajax メソッドでは、FormData メソッドを使用して更新なしのアップロードを実現することもできます。ただし、パラメータ設定に注意してください。以下を参照してください:
$.ajax({ url: "http://jb51.net", type: 'POST', data: fd, /** *必须false才会自动加上正确的Content-Type */ contentType:false, /** * 必须false才会避开jQuery对 formdata 的默认处理 * XMLHttpRequest会对 formdata 进行正确的处理 */ processData:false }).done(function(result){ console.log(result); }).fail(function(err){ console.log(err); });
<?php //php 接收表单提交信息并打印 if( isset( $_REQUEST['do']) ){ var_dump($_REQUEST); var_dump($_FILES); die(); } ?> <!DOCTYPE HTML> <html> <head> <meta charset="utf-8"> <title>FormData Test - jb51.net</title> <script src="http://libs.baidu.com/jquery/2.0.0/jquery.min.js"></script> </head> <body> <form id="form"> <input type="file" name="file" id="file" /> <input type="text" name="name" id="" value="脚本之家" /> <input type="text" name="blog" id="" value="http://jb51.net" /> <input type="submit" name="do" id="do" value="submit" /> </form> <script> $("form").submit(function(e){ e.preventDefault(); //空对象然后添加 var fd = new FormData(); fd.append("name", "脚本之家"); fd.append("blog", "http://jb51.net"); fd.append("file", document.getElementById("file")); //fd.append("file", $(":file")[0].files[0]); //jQuery 方式 fd.append("do", "submit"); //通过表单对象创建 FormData var fd = new FormData(document.getElementById("form")); //var fd = new FormData($("form:eq(0)")[0]); //jquery 方式 //XMLHttpRequest 原生方式发送请求 var xhr = new XMLHttpRequest(); xhr.open("POST" ,"" , true); xhr.send(fd); xhr.onload = function(e) { if (this.status == 200) { alert(this.responseText); }; }; return; //jQuery 方式发送请求 $.ajax({ type:"post", //url:"", data: fd, processData: false, contentType: false }).done(function(res){ console.log(res); }); return false; }); </script> </body> </html>
上記は全体です。この記事の内容が皆さんの学習に役立つことを願っています。その他の関連コンテンツについては、PHP 中国語 Web サイトに注目してください。
関連する推奨事項:
HTML5 はカスタム コントロールに DOM を使用しますHTML5 と CSS3 コードを使用して製品情報の 3D 表示を実装します以上がPHP および HTML5 FormData を使用した、更新不要のファイルのアップロードの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。