JQueryはFormData異歩に基づいてデータファイルを提出します。
webでのデータ提出イベントは頻繁に発生しますが、多くの場合、htmlのフォームを使って提出したくないです。フォームの提出は現在のブラウザの操作を中断して、他のアドレスに転送されます。(このアドレスが現在のページであっても)、重複してロードされます。非同期の提出効果は、ユーザーにより良い体験を与えるために、ajaxを使用します。ajaxはフォームに依存せずにhttp要求を開始し、サーバーの応答データを取り戻すことができます。これはajaxの簡便さです。私達はJQueryの中で良いajax関数を包装して、更に簡便です。ajaxを使って非同期でデータを提出する方法をいくつか挙げます。
一:jquery.jsの中の$ajax方法
この方法はjquery.jsプラグインに依存しています。たくさんのバージョンがあります。自分でダウンロードできます。
この$ajaxメソッドでは、要求アドレス、要求タイプ、送信が必要なデータ、要求成功後に実行する必要がある動作などのパラメータを指定します。ここで簡単に説明します。
ファイルの提出に対しては、私たちは$ajaxに対して特別な設定を行い、FormDataのオブジェクトを使用する必要があります。
その後、サーバーはファイルを受信できます。フォームと同じ受信方法です。
もちろん、一つのフォームを直接FormDataオブジェクトに変換することができます。このようにして、必要な内容を一つ一つappedからFormDataの中に入れることは避けられます。
fd.set(「CustoomField」、「This is some extra」)
ajaxはアクティブイベントですが、ユーザーがボタンを押してから実行したいです。ここでは、ボタンのclickイベントにajax関数を置いてもいいです。次の方法を使ってもいいです。
注意:一部の文章ではFormDataの互換性の問題についてFormDataが早く提出されました。そして株に入りますよ。jqueryの中のajaxを使ってファイルを転送するには、次の2つの方法がFormDataを使っているからです。もちろん原生のajaxは直接ファイルを転送する方法があります。興味がある人は見てください。
以上が本文の全部です。皆さんの勉強に役に立つように、私たちを応援してください。
一:jquery.jsの中の$ajax方法
この方法はjquery.jsプラグインに依存しています。たくさんのバージョンがあります。自分でダウンロードできます。
この$ajaxメソッドでは、要求アドレス、要求タイプ、送信が必要なデータ、要求成功後に実行する必要がある動作などのパラメータを指定します。ここで簡単に説明します。
$.ajax({
url:" url ",
type:'post',
data:{key:'value'},
success:function(){
alert(' ');
}
})
これは$ajaxメソッドの簡単な使い方です。このパラメータはデータを送信するためのものです。ここではdataはJsonオブジェクトと文字列をサポートしています。dataデータがformフォームの中の場合、自分でjsonを書くのは遅いです。jqueryの中のserizlizeを使うことができます。この方法は文字列を返します。各フォームが提出されたときも同じ書式に変換された文字列です。
$.ajax({
url:" url ",
type:'post',
data:$('form').serialize(), // "id=asdasd&s=000&name=1233"
success:function(){
alert(' ');
}
})
書類もこのように提出しますか?ファイルの提出に対しては、私たちは$ajaxに対して特別な設定を行い、FormDataのオブジェクトを使用する必要があります。
<input type="file" name="f" id="f" multiple>
var fd = new FormData();
fd.append("name", "bill");
fd.append("photo", $('#f')[0].files[0]);
fd.append("photo2", $('#f')[0].files[1]);
$.ajax({
url: '/webform1.aspx',
type: 'post',
processData: false,
contentType: false,
data: fd,
success: function () {
alert("ok")
}
})
fdオブジェクトを作成してキーペアを追加します。この値はファイルでもいいです。f')[0]は、ID=fを取り出す要素であり、なぜ[0]なのかというと、jqueryオブジェクトにはデフォルトでは0のインデックスがあり、そのDom要素を取り出すために用いられています。ファイルを取り出しにfilesを使います。ここで私はfiles[0]とfiles[1]を使っています。これはmultipleです。複数のファイルをアップロードできます。ここで2つアップロードしました。その後、サーバーはファイルを受信できます。フォームと同じ受信方法です。
もちろん、一つのフォームを直接FormDataオブジェクトに変換することができます。このようにして、必要な内容を一つ一つappedからFormDataの中に入れることは避けられます。
var fd = new FormData(document.querySelector("form"));
fd.append("CustomField", "This is some extra data");
$.ajax({
url: "stash.php",
type: "POST",
data: fd,
processData: false, //
contentType: false //
});
appedを使用して追加した時にformdataのkeyが既に存在したら、重複して追加することはできません。今回のapped操作を無視します。これは常にフォームを使用して値を取り出すには不利です。set方法を使って新たなkey-value値を追加することを提案します。setの意味は既に存在しているキーペアを修正します。存在しない場合は作成します。すなわちfd.set(「CustoomField」、「This is some extra」)
ajaxはアクティブイベントですが、ユーザーがボタンを押してから実行したいです。ここでは、ボタンのclickイベントにajax関数を置いてもいいです。次の方法を使ってもいいです。
$('form').submit(function{
// ,
$.ajax({
});
return false;
})
submit関数は、フォームが提出されたときに実行できます。これを$ajax関数を実行するトリガイベントとして使用して、return falseを使用して、このフォームの提出を事前に停止します。注意:一部の文章ではFormDataの互換性の問題についてFormDataが早く提出されました。そして株に入りますよ。jqueryの中のajaxを使ってファイルを転送するには、次の2つの方法がFormDataを使っているからです。もちろん原生のajaxは直接ファイルを転送する方法があります。興味がある人は見てください。
以上が本文の全部です。皆さんの勉強に役に立つように、私たちを応援してください。