ホームページ ウェブフロントエンド jsチュートリアル ajaxfileupload.js を使用して Ajax アップロード ファイル php version_jquery を実装する

ajaxfileupload.js を使用して Ajax アップロード ファイル php version_jquery を実装する

May 16, 2016 pm 04:43 PM
ajax ファイルをアップロードする

PHP とその他のサーバーサイド スクリプトの両方がファイル アップロード機能を提供しており、実装は比較的簡単です。 JavaScriptと連携してAjaxファイルアップロードを実装できます。 jQuery 自体にはこのような簡略化された機能はありませんが、それを実現できるプラグインは数多くあります。その中でもPhpletter.comが提供するajaxfileupload.jsは軽量なプラグインであり、その記述方法はjQueryが提供するグローバルメソッド$.post()に非常に似ており、シンプルで使いやすいです。
ただし、プラグインは単純すぎるため、アップロードするファイルのパスを提供するだけでなく、バ​​ックエンド サーバーに追加の値を渡すこともできません。そこで、スクリプトを変更してデータ オブジェクト パラメーターを追加しました。

1. 原則

ここではサーバー スクリプトとして PHP を使用しています。ほとんどすべての PHP を使用しない書籍には、move_uploaded_file() メソッドを使用してファイルをアップロードする方法が記載されているため、ここでは詳しく説明しません。私が言いたいのは、Ajax アップロードの原則を使用してくださいということです。
私は jQuery ライブラリを使用しているため、Ajax について考えるとき、私の最初の反応は $.post() メソッドを試し、各セレクターを使用してファイル ファイル ボックス内の値を取得し、それをバックグラウンド サーバーに送信することです。 。もちろん、これはうまくいかないことが後でわかりました。 (この問題のため、私も多くの情報を確認しましたが、オンラインで入手可能な ASP やその他のスクリプトが多数あります。本当に何を言えばよいのかわかりません。)
話を戻しますが、Ajax アップロードの実装は難しくなく、さまざまな方法があります。この記事で説明されている Phpletter.com の ajaxfileupload.js プラグインは iframe を使用します。これは、JavaScript スクリプトを使用しない場合に、ページを更新せずにアップロードを実現する一般的な方法でもあります。 (このブログはbo-blogのバックグラウンドでログを書くためにこの方法を使っています)
ajaxfileupload.js プラグインも非常に単純です。最初に jQuery のセレクターを使用してファイル アップロード ボックス内のファイル パス値を取得し、次に iframe を動的に作成し、その中に新しいファイル ボックスを作成して、送信するポスト メソッドを提供します。バックステージへ。最後に結果をフロントへご返却ください。

2.

を使用します。

ajaxfileupload.js プラグインの使用は非常に簡単です。
フロントエンドの HTML コードは次のようになります:

<script type="text/javascript">
$(#buttonUplod).click(function () {
 $.ajaxFileUpload ({
  url:'doajaxfileupload.php', //你处理上传文件的服务端
  secureuri:false, //与页面处理代码中file相对应的ID值
  fileElementId:'img',
  dataType: 'json', //返回数据类型:text,xml,json,html,scritp,jsonp五种
  success: function (data) {
   alert(data.file_infor);
  }
 })
});
</script>
<input id="img" type="file" size="45" name="img" >
<button id="buttonUpload" onclick="return ajaxFileUpload();">Upload</button> 
ログイン後にコピー

バックエンド doajaxfileupload.php スクリプト:

<&#63;php
 $upFilePath = "../attachment/";
$ok=@move_uploaded_file($_FILES['img']['tmp_name'],$upFilePath);
 if($ok === FALSE){
  echo json_encode('file_infor'=>'上传失败');
 }else{
  echo json_encode('file_infor'=>'上传成功');
 }
&#63;> 

ログイン後にコピー


テストのために、次のようなメソッドを使用して、渡された変数値を保存できます:

$file_info = var_export($_FILES,true);
$ok = file_put_contents("../attachment/file_info.txt",$file_info);
if ($ok) exit(json_encode('file_infor'=>'アップロード成功'));
exit (json_encode('file_infor'=>'アップロードに失敗しました'));


※注意事項
HTML コード ファイル ボックス内のタグに注意してください:

1. id='img' は、ajaxfileupload.js プラグインの fileElementId:'img' を識別するために使用されます。
2. name='img' は、post を通じてバックグラウンド スクリプトに送信するときに使用されます。PHP は、$_FILES['img'] を通じてアップロードされたファイルのデータを読み取ります。そのような値がない場合、$_FILES 変数は空です。 🎜>

したがって、これら 2 つの値は不可欠であり、混同することはできません。

3. 追加パラメータのサポート

場合によっては、バックグラウンドで特定の変数に基づいてアップロードされたファイルを処理する必要があります。たとえば、ファイルを更新します。この時点で、いくつかの追加パラメータを同じステージに渡す必要があります。そこで、ajaxfileupload.js プラグインを変更しました。

addOtherRequestsToForm: function(form,data)
{
 // add extra parameter
 var originalElement = $('<input type="hidden" name="" value="">');
 for (var key in data) {
  name = key;
  value = data[key];
  var cloneElement = originalElement.clone();
cloneElement.attr({'name':name,'value':value});
  $(cloneElement).appendTo(form);
 }
 return form;
}, 

ajaxFileUpload: function(s) {
 // TODO introduce global settings, allowing the client to modify them for all requests, not only timeout  
 s = jQuery.extend({}, jQuery.ajaxSettings, s);
 var id = new Date().getTime()    
 var form = jQuery.createUploadForm(id, s.fileElementId);
 if ( s.data ) form = jQuery.addOtherRequestsToForm(form,s.data);
 var io = jQuery.createUploadIframe(id, s.secureuri); 

ログイン後にコピー
赤枠部分が私が追加した内容です。このようにして、次のようなコードを通じてフロントエンド HTML 部分に追加のパラメーターを渡すことができます:

url:'doajaxfileupload.php', //アップロードされたファイルを処理するサーバー

secureuri:false, //ページ処理コード内のファイルに対応するID値
data:{'test':'test','ok':'ok'}, //オブジェクトとして送信され、コンテンツ部分にJavaScriptの変数値を入力可能
fileElementId:'img',

バックグラウンド処理スクリプトは次のとおりです:

array_push($_FILES,$_REQUEST);
$file_info = var_export($_FILES,true);
$ok = file_put_contents("../attachment/file_info.txt",$file_info);
if ($ok) exit(json_encode('file_infor'=>'上传成功'));
exit (json_encode('file_infor'=>'上传失败')); 

ログイン後にコピー
原理は非常に単純であることがわかります。つまり、追加のデータ オブジェクトのコンテンツを iframe の下のフォームに追加し、それをバックグラウンドの PHP スクリプトに渡し、次のような変数を使用してこれらの値を取得します。 $_リクエスト。

バックグラウンド出力に保持される file_info.txt の内容は次のとおりです:

配列 (

) 'ファイル' =>
配列 (
'名前' => 'firefox-java.txt',
'type' => 'text/plain',
'tmp_name' => 'D:\Tools\xampp\tmp\phpED45.tmp',
'エラー' => 0,
'サイズ' => 250,
)、
0 =>
配列 (
'テスト' => 'テスト',
「わかりました」 => 「わかりました」、
'PHPSESSID' => 'e379fd4fb2abca6e802a1302805a5535',
)、
)

ajaxfileupload.js:

jQuery.extend({
  createUploadIframe: function(id, uri)
 {
  //create frame
var frameId = 'jUploadFrame' + id;
if(window.ActiveXObject) {
var io = document.createElement('<iframe id="' + frameId + '" name="' + frameId + '" />');
if(typeof uri== 'boolean'){
io.src = 'javascript:false';
}
else if(typeof uri== 'string'){
io.src = uri;
}
}
else {
var io = document.createElement('iframe');
io.id = frameId;
io.name = frameId;
}
io.style.position = 'absolute';
io.style.top = '-1000px';
io.style.left = '-1000px'; 

document.body.appendChild(io); 

return io  
  },
  createUploadForm: function(id, fileElementId)
 {
 //create form 
 var formId = 'jUploadForm' + id;
 var fileId = 'jUploadFile' + id;
 var form = $('<form action="" method="POST" name="' + formId + '" id="' + formId + '" enctype="multipart/form-data"></form>'); 
 var oldElement = $('#' + fileElementId);
 var newElement = $(oldElement).clone();
 $(oldElement).attr('id', fileId);
 $(oldElement).before(newElement);
 $(oldElement).appendTo(form);
 //set attributes
 $(form).css('position', 'absolute');
 $(form).css('top', '-1200px');
 $(form).css('left', '-1200px');
 $(form).appendTo('body'); 
 return form;
  },
 addOtherRequestsToForm: function(form,data)
 {
 // add extra parameter
 var originalElement = $('<input type="hidden" name="" value="">');
 for (var key in data) {
  name = key;
  value = data[key];
  var cloneElement = originalElement.clone();
  cloneElement.attr({'name':name,'value':value});
  $(cloneElement).appendTo(form);
 }
 return form;
 }, 

  ajaxFileUpload: function(s) {
    // TODO introduce global settings, allowing the client to modify them for all requests, not only timeout 
    s = jQuery.extend({}, jQuery.ajaxSettings, s);
    var id = new Date().getTime()    
 var form = jQuery.createUploadForm(id, s.fileElementId);
 if ( s.data ) form = jQuery.addOtherRequestsToForm(form,s.data);
 var io = jQuery.createUploadIframe(id, s.secureuri);
 var frameId = 'jUploadFrame' + id;
 var formId = 'jUploadForm' + id; 
    // Watch for a new set of requests
    if ( s.global && ! jQuery.active++ )
 {
  jQuery.event.trigger( "ajaxStart" );
 }      
    var requestDone = false;
    // Create the request object
    var xml = {} 
    if ( s.global )
jQuery.event.trigger("ajaxSend", [xml, s]);
    // Wait for a response to come back
    var uploadCallback = function(isTimeout)
 {  
  var io = document.getElementById(frameId);
try
  {  
  if(io.contentWindow)
  {
   xml.responseText = io.contentWindow.document.body&#63;io.contentWindow.document.body.innerHTML:null;
 xml.responseXML = io.contentWindow.document.XMLDocument&#63;io.contentWindow.document.XMLDocument:io.contentWindow.document;
  }else if(io.contentDocument)
  {
   xml.responseText = io.contentDocument.document.body&#63;io.contentDocument.document.body.innerHTML:null;
 xml.responseXML = io.contentDocument.document.XMLDocument&#63;io.contentDocument.document.XMLDocument:io.contentDocument.document;
  }   
}catch(e)
  {
  jQuery.handleError(s, xml, null, e);
  }
if ( xml || isTimeout == "timeout")
  {  
requestDone = true;
var status;
try {
status = isTimeout != "timeout" &#63; "success" : "error";
// Make sure that the request was successful or notmodified
if ( status != "error" )
   {
// process the data (runs the xml through httpData regardless of callback)
var data = jQuery.uploadHttpData( xml, s.dataType );  
// If a local callback was specified, fire it and pass it the data
if ( s.success )
s.success( data, status );
// Fire the global callback
if( s.global )
jQuery.event.trigger( "ajaxSuccess", [xml, s] );
} else
jQuery.handleError(s, xml, status);
} catch(e)
  {
status = "error";
jQuery.handleError(s, xml, status, e);
} 

// The request was completed
if( s.global )
jQuery.event.trigger( "ajaxComplete", [xml, s] ); 

// Handle the global AJAX counter
if ( s.global && ! --jQuery.active )
jQuery.event.trigger( "ajaxStop" ); 

// Process result
if ( s.complete )
s.complete(xml, status); 

jQuery(io).unbind() 

setTimeout(function()
     { try
     {
      $(io).remove();
      $(form).remove(); 
     } catch(e)
     {
      jQuery.handleError(s, xml, null, e);
     }     

     }, 100) 

xml = null 

}
    }
    // Timeout checker
    if ( s.timeout > 0 )
 {
setTimeout(function(){
// Check to see if the request is still happening
if( !requestDone ) uploadCallback( "timeout" );
}, s.timeout);
    }
    try
 {
      // var io = $('#' + frameId);
  var form = $('#' + formId);
  $(form).attr('action', s.url);
  $(form).attr('method', 'POST');
  $(form).attr('target', frameId);
if(form.encoding)
  {
form.encoding = 'multipart/form-data';  
}
else
  {  
form.enctype = 'multipart/form-data';
}  
$(form).submit(); 

    } catch(e)
 {  
jQuery.handleError(s, xml, null, e);
    }
if(window.attachEvent){
document.getElementById(frameId).attachEvent('onload', uploadCallback);
    }
    else{
document.getElementById(frameId).addEventListener('load', uploadCallback, false);
    }  
    return {abort: function () {}}; 

  }, 

  uploadHttpData: function( r, type ) {
    var data = !type;
    data = type == "xml" || data &#63; r.responseXML : r.responseText;
    // If the type is "script", eval it in global context
    if ( type == "script" )
jQuery.globalEval( data );
    // Get the JavaScript object, if JSON is used.
    if ( type == "json" )
eval( "data = " + data );
    // evaluate scripts within html
    if ( type == "html" )
jQuery("<div>").html(data).evalScripts();
  //alert($('param', data).each(function(){alert($(this).attr('value'));}));
    return data;
  }
}) 
ログイン後にコピー
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

AI Hentai Generator

AI Hentai Generator

AIヘンタイを無料で生成します。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

123クラウドディスクにファイルをアップロードする方法 123クラウドディスクにファイルをアップロードする方法 Feb 24, 2024 pm 05:30 PM

123 クラウド ディスクにファイルをアップロードするにはどうすればよいですか? ファイルを 123 クラウド ディスクにアップロードして保存できますが、ほとんどの友人は 123 クラウド ディスクにファイルをアップロードする方法を知りません。次に、123 クラウドにファイルをアップロードする方法の画像とテキストを示します。編集者がプレイヤーのために持ってきたディスク、チュートリアル、興味のあるユーザーは見に来てください! 123 Cloud Disk にファイルをアップロードする方法 1. まず 123 Cloud Disk を開いてメイン ページに入り、アカウントに登録またはログインします; 2. 次に、以下に示すページに入り、矢印に沿って [アップロード] ボタンをクリックします。 3. 下部が展開されます。 機能バー ウィンドウで [ファイルの選択] 機能をクリックします; 4. 最後に、アップロードするファイルを選択し、アップロードが完了するまで辛抱強く待ちます。

jQuery AJAX リクエストで発生した 403 エラーを解決する方法 jQuery AJAX リクエストで発生した 403 エラーを解決する方法 Feb 20, 2024 am 10:07 AM

タイトル: jQuery AJAX リクエストの 403 エラーを解決する方法とコード例。403 エラーは、サーバーがリソースへのアクセスを禁止するリクエストを指します。このエラーは通常、リクエストにアクセス許可がないか、サーバーによって拒否されたために発生します。 jQueryAJAX リクエストを行うときにこのような状況に遭遇することがありますが、この記事ではこの問題の解決方法とコード例を紹介します。解決策: 権限を確認します。まず、要求された URL アドレスが正しいことを確認し、リソースにアクセスするための十分な権限があることを確認します。

jQuery AJAXリクエスト403エラーを解決する方法 jQuery AJAXリクエスト403エラーを解決する方法 Feb 19, 2024 pm 05:55 PM

jQuery は、クライアント側の開発を簡素化するために使用される人気のある JavaScript ライブラリです。 AJAX は、Web ページ全体をリロードせずに、非同期リクエストを送信し、サーバーと対話するテクノロジーです。ただし、jQuery を使用して AJAX リクエストを行うと、403 エラーが発生することがあります。 403 エラーは通常、セキュリティ ポリシーまたは権限の問題が原因で、サーバーによってアクセスが拒否されたエラーです。この記事では、jQueryAJAX リクエストで 403 エラーが発生した場合の解決方法について説明します。

Ajaxを使用してPHPメソッドから変数を取得するにはどうすればよいですか? Ajaxを使用してPHPメソッドから変数を取得するにはどうすればよいですか? Mar 09, 2024 pm 05:36 PM

Ajax を使用して PHP メソッドから変数を取得することは、Web 開発では一般的なシナリオであり、Ajax を使用すると、データを更新せずにページを動的に取得できます。この記事では、Ajax を使用して PHP メソッドから変数を取得する方法と、具体的なコード例を紹介します。まず、Ajax リクエストを処理し、必要な変数を返すための PHP ファイルを作成する必要があります。以下は、単純な PHP ファイル getData.php のサンプル コードです。

jQuery AJAX エラー 403 の問題を解決するにはどうすればよいですか? jQuery AJAX エラー 403 の問題を解決するにはどうすればよいですか? Feb 23, 2024 pm 04:27 PM

jQueryAJAX エラー 403 の問題を解決するにはどうすればよいですか? Web アプリケーションを開発する場合、非同期リクエストを送信するために jQuery がよく使用されます。ただし、jQueryAJAX の使用時に、サーバーによってアクセスが禁止されていることを示すエラー コード 403 が発生する場合があります。これは通常、サーバー側のセキュリティ設定が原因ですが、回避する方法があります。この記事では、jQueryAJAX エラー 403 の問題を解決する方法と具体的なコード例を紹介します。 1.作る

Nut Cloudにファイルをアップロードする方法 Nut Cloudにファイルをアップロードする方法 Feb 27, 2024 pm 03:58 PM

Nut Cloud は、ユーザーにインテリジェントなファイル保存および同期サービスを提供することに特化した効率的なファイル管理ツールです。強力なデータ同期とバックアップ機能を備えており、ユーザーのデータの安全性を確保します。 Nut Cloud の一連の機能は、さまざまなシナリオでユーザーのニーズを満たし、優れたユーザー エクスペリエンスを提供するように設計されています。 Nut Cloud アプリにファイルをアップロードするにはどうすればよいでしょうか? このチュートリアル ガイドでは、手順について詳しく説明します。必要としているすべての人に役立つことを願っています。 Nut Cloud にファイルをアップロードするにはどうすればよいですか? 1. [マイ ファイル] ページで、[My Nut Cloud] をクリックして開きます。 2. 開いたページで、右下隅のプラスアイコンをクリックします。 3. 下部に表示されるオプションで、「SD カードからアップロード」をクリックします。 4. 開いた携帯電話ストレージでファイルを選択します。

PHP と Ajax: 動的に読み込まれるコンテンツを作成するためのソリューション PHP と Ajax: 動的に読み込まれるコンテンツを作成するためのソリューション Jun 06, 2024 pm 01:12 PM

Ajax (非同期 JavaScript および XML) を使用すると、ページをリロードせずに動的コンテンツを追加できます。 PHP と Ajax を使用すると、製品リストを動的にロードできます。HTML はコンテナ要素を含むページを作成し、Ajax リクエストはロード後に要素にデータを追加します。 JavaScript は Ajax を使用して XMLHttpRequest を通じてサーバーにリクエストを送信し、サーバーから JSON 形式で商品データを取得します。 PHP は MySQL を使用してデータベースから製品データをクエリし、それを JSON 形式にエンコードします。 JavaScript は JSON データを解析し、ページ コンテナーに表示します。ボタンをクリックすると、製品リストをロードするための Ajax リクエストがトリガーされます。

Ajax機能を利用した非同期データ交換 Ajax機能を利用した非同期データ交換 Jan 26, 2024 am 09:41 AM

Ajax 機能を使用して非同期データ対話を実現する方法 インターネットと Web テクノロジーの発展に伴い、フロントエンドとバックエンド間のデータ対話が非常に重要になってきました。ページの更新やフォームの送信などの従来のデータ操作方法では、ユーザーのニーズを満たすことができなくなりました。 Ajax (非同期 JavaScript および XML) は、非同期データ対話のための重要なツールとなっています。 Ajax により、Web で JavaScript と XMLHttpRequest オブジェクトを使用できるようになります

See all articles