Rumah hujung hadapan web tutorial js Gunakan ajaxfileupload.js untuk melaksanakan ajax upload file php version_jquery

Gunakan ajaxfileupload.js untuk melaksanakan ajax upload file php version_jquery

May 16, 2016 pm 04:43 PM
ajax Muat naik fail

Kedua-dua PHP dan skrip sebelah pelayan lain menyediakan fungsi muat naik fail, dan ia agak mudah untuk dilaksanakan. Menggunakan JavaScript untuk bekerjasama, anda boleh melaksanakan muat naik fail Ajax. Walaupun jQuery sendiri tidak menyediakan fungsi yang dipermudahkan, terdapat banyak pemalam yang boleh mencapainya. Antaranya, ajaxfileupload.js yang disediakan oleh Phpletter.com ialah pemalam yang ringan, dan kaedah penulisannya sangat serupa dengan kaedah global $.post() yang disediakan oleh jQuery, yang mudah dan mudah digunakan.
Walau bagaimanapun, pemalam itu terlalu dipermudahkan Selain menyediakan laluan fail untuk dimuat naik, ia tidak boleh menghantar nilai tambahan kepada pelayan bahagian belakang. Jadi, saya mengubah suai skrip dan menambah parameter objek data.

1. Prinsip

Saya menggunakan PHP sebagai skrip pelayan di sini Hampir setiap buku tanpa PHP akan menyebut cara menggunakan kaedah move_uploaded_file() untuk memuat naik fail, jadi saya tidak akan menerangkan butiran di sini. Apa yang saya ingin katakan ialah, gunakan prinsip muat naik Ajax.
Kerana saya telah menggunakan perpustakaan jQuery, apabila saya memikirkan Ajax, reaksi pertama saya ialah mencuba kaedah $.post(), gunakan setiap pemilih untuk mendapatkan nilai dalam kotak fail fail, dan kemudian serahkannya ke pelayan latar belakang . Sudah tentu, ternyata kemudian bahawa ini tidak berfungsi. (Disebabkan masalah ini, saya juga menyemak banyak maklumat, dan terdapat banyak ASP dan skrip lain yang tersedia dalam talian. Saya benar-benar tidak tahu apa yang hendak dikatakan.)
Kembali ke topik, tidak sukar untuk melaksanakan muat naik Ajax, dan terdapat banyak kaedah. Pemalam ajaxfileupload.js Phpletter.com yang disebut dalam artikel ini menggunakan iframe. Ini juga merupakan kaedah biasa untuk mencapai muat naik tanpa memuat semula halaman apabila tidak menggunakan skrip JavaScript. (Blog ini menggunakan kaedah ini untuk menulis log di latar belakang bo-blog)
Pemalam ajaxfileupload.js juga sangat mudah Ia mula-mula menggunakan pemilih jQuery untuk mendapatkan nilai laluan fail dalam kotak muat naik fail, kemudian mencipta iframe secara dinamik dan mencipta kotak fail baharu di dalamnya, menyediakan kaedah pos untuk diserahkan. ke Belakang pentas. Akhirnya, keputusan dikembalikan ke kaunter penerimaan tetamu.

2. Gunakan

Menggunakan pemalam ajaxfileupload.js adalah sangat mudah.
Kod HTML bahagian hadapan adalah serupa:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

<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>

Salin selepas log masuk

Skrip doajaxfileupload.php belakang:

1

2

3

4

5

6

7

8

9

<&#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;>

Salin selepas log masuk


Untuk ujian, anda boleh menyimpan nilai pembolehubah yang diluluskan menggunakan kaedah yang serupa dengan yang berikut:

$file_info = var_export($_FILES,true);
$ok = file_put_contents("../attachment/file_info.txt",$file_info);
if ($ok) exit(json_encode('file_infor'=>'Muat naik berjaya'));
keluar (json_encode('file_infor'=>'Muat naik gagal'));


※ Nota
Sila ambil perhatian teg dalam kotak fail kod HTML:

1. id='img' digunakan untuk mengenal pasti fileElementId:'img' pemalam ajaxfileupload.js Pemilih jQuery akan menggunakan rentetan ini untuk mendapatkan nilai kotak teks 2. name='img' digunakan apabila menyerahkan kepada skrip latar belakang melalui mod pos PHP membaca data fail yang dimuat naik melalui $_FILES['img'].

Jadi, kedua-dua nilai ini amat diperlukan dan tidak boleh dikelirukan.

3. Sokong parameter tambahan

Kadangkala, kita perlu memproses fail yang dimuat naik berdasarkan pembolehubah tertentu di latar belakang. Contohnya, kemas kini fail. Pada masa ini, anda perlu menghantar beberapa parameter tambahan ke peringkat yang sama. Jadi, saya mengubah suai pemalam ajaxfileupload.js:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

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);

Salin selepas log masuk
Bahagian bertanda merah adalah kandungan yang saya tambah. Dengan cara ini, saya boleh menghantar parameter tambahan dalam bahagian HTML bahagian hadapan melalui kod yang serupa dengan yang berikut:

url:'doajaxfileupload.php', //Pelayan anda yang mengendalikan fail yang dimuat naik

secureuri:false, //nilai ID yang sepadan dengan fail dalam kod pemprosesan halaman
data:{'test':'test','ok':'ok'}, //Dihantar sebagai objek, nilai pembolehubah JavaScript boleh dimasukkan dalam bahagian kandungan
fileElementId:'img',

Skrip pemprosesan latar belakang ialah:

1

2

3

4

5

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'=>'上传失败'));

Salin selepas log masuk
Ia boleh dilihat bahawa prinsipnya sangat mudah, iaitu, tambahkan kandungan objek data tambahan pada borang di bawah iframe, hantarkannya ke skrip PHP latar belakang, dan dapatkan nilai ini dengan pembolehubah seperti $_REQUEST.

Kandungan file_info.txt yang dikekalkan dalam output latar belakang adalah seperti berikut:

susun (

'fail' =>
tatasusunan (
'name' => 'firefox-java.txt',
'type' => 'teks/plain',
'tmp_name' => 'D:\Tools\xampp\tmp\phpED45.tmp',
'error' => 0,
'saiz' => 250,
),
0 =>
tatasusunan (
'test' => 'test',
'ok' => 'ok',
'PHPSESSID' => 'e379fd4fb2abca6e802a1302805a5535',
),
)

ajaxfileupload.js:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

60

61

62

63

64

65

66

67

68

69

70

71

72

73

74

75

76

77

78

79

80

81

82

83

84

85

86

87

88

89

90

91

92

93

94

95

96

97

98

99

100

101

102

103

104

105

106

107

108

109

110

111

112

113

114

115

116

117

118

119

120

121

122

123

124

125

126

127

128

129

130

131

132

133

134

135

136

137

138

139

140

141

142

143

144

145

146

147

148

149

150

151

152

153

154

155

156

157

158

159

160

161

162

163

164

165

166

167

168

169

170

171

172

173

174

175

176

177

178

179

180

181

182

183

184

185

186

187

188

189

190

191

192

193

194

195

196

197

198

199

200

201

202

203

204

205

206

207

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;

  }

})

Salin selepas log masuk
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn

Alat AI Hot

Undresser.AI Undress

Undresser.AI Undress

Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover

AI Clothes Remover

Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool

Undress AI Tool

Gambar buka pakaian secara percuma

Clothoff.io

Clothoff.io

Penyingkiran pakaian AI

Video Face Swap

Video Face Swap

Tukar muka dalam mana-mana video dengan mudah menggunakan alat tukar muka AI percuma kami!

Alat panas

Notepad++7.3.1

Notepad++7.3.1

Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina

SublimeText3 versi Cina

Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1

Hantar Studio 13.0.1

Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6

Dreamweaver CS6

Alat pembangunan web visual

SublimeText3 versi Mac

SublimeText3 versi Mac

Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Bagaimana untuk memuat naik fail ke cakera awan 123 Bagaimana untuk memuat naik fail ke cakera awan 123 Feb 24, 2024 pm 05:30 PM

Bagaimana untuk memuat naik fail ke 123 Cloud Disk? Anda boleh memuat naik fail ke 123 Cloud Disk untuk simpanan, tetapi kebanyakan rakan tidak tahu cara memuat naik fail ke 123 Cloud Disk. Seterusnya ialah gambar dan teks cara memuat naik fail ke 123 Cloud Cakera yang dibawa oleh editor untuk Tutorial pemain, pengguna yang berminat datang dan lihat! Cara memuat naik fail pada 123 Cloud Disk 1. Mula-mula buka 123 Cloud Disk dan masukkan halaman utama, daftar atau log masuk ke akaun 2. Kemudian masukkan halaman seperti yang ditunjukkan di bawah, klik butang [Muat naik] berpandukan anak panah; 3. Kemudian bahagian bawah akan mengembang Dalam tetingkap bar fungsi, klik fungsi [Pilih Fail] 4. Akhir sekali, pilih fail untuk dimuat naik dan tunggu muat naik selesai.

Bagaimana untuk menyelesaikan ralat 403 yang dihadapi oleh permintaan jQuery AJAX Bagaimana untuk menyelesaikan ralat 403 yang dihadapi oleh permintaan jQuery AJAX Feb 20, 2024 am 10:07 AM

Tajuk: Kaedah dan contoh kod untuk menyelesaikan ralat 403 dalam permintaan AJAX jQuery Ralat 403 merujuk kepada permintaan bahawa pelayan melarang akses kepada sumber Ralat ini biasanya berlaku kerana permintaan itu tidak mempunyai kebenaran atau ditolak oleh pelayan. Apabila membuat permintaan jQueryAJAX, anda kadangkala menghadapi situasi ini Artikel ini akan memperkenalkan cara menyelesaikan masalah ini dan memberikan contoh kod. Penyelesaian: Semak kebenaran: Mula-mula pastikan alamat URL yang diminta adalah betul dan sahkan bahawa anda mempunyai kebenaran yang mencukupi untuk mengakses sumber tersebut.

PHP dan Ajax: Membina enjin cadangan autolengkap PHP dan Ajax: Membina enjin cadangan autolengkap Jun 02, 2024 pm 08:39 PM

Bina enjin cadangan autolengkap menggunakan PHP dan Ajax: Skrip sisi pelayan: mengendalikan permintaan Ajax dan mengembalikan cadangan (autocomplete.php). Skrip pelanggan: Hantar permintaan Ajax dan cadangan paparan (autocomplete.js). Kes praktikal: Sertakan skrip dalam halaman HTML dan nyatakan pengecam elemen input carian.

Bagaimana untuk menyelesaikan ralat permintaan jQuery AJAX 403 Bagaimana untuk menyelesaikan ralat permintaan jQuery AJAX 403 Feb 19, 2024 pm 05:55 PM

jQuery ialah perpustakaan JavaScript popular yang digunakan untuk memudahkan pembangunan sisi klien. AJAX ialah teknologi yang menghantar permintaan tak segerak dan berinteraksi dengan pelayan tanpa memuatkan semula keseluruhan halaman web. Walau bagaimanapun, apabila menggunakan jQuery untuk membuat permintaan AJAX, anda kadangkala menghadapi 403 ralat. Ralat 403 biasanya ralat akses yang dinafikan pelayan, mungkin disebabkan oleh dasar keselamatan atau isu kebenaran. Dalam artikel ini, kami akan membincangkan cara menyelesaikan permintaan jQueryAJAX yang menghadapi ralat 403

Bagaimana untuk menyelesaikan masalah jQuery AJAX ralat 403? Bagaimana untuk menyelesaikan masalah jQuery AJAX ralat 403? Feb 23, 2024 pm 04:27 PM

Bagaimana untuk menyelesaikan masalah jQueryAJAX ralat 403? Apabila membangunkan aplikasi web, jQuery sering digunakan untuk menghantar permintaan tak segerak. Walau bagaimanapun, kadangkala anda mungkin menghadapi kod ralat 403 apabila menggunakan jQueryAJAX, menunjukkan bahawa akses dilarang oleh pelayan. Ini biasanya disebabkan oleh tetapan keselamatan bahagian pelayan, tetapi terdapat cara untuk mengatasinya. Artikel ini akan memperkenalkan cara menyelesaikan masalah ralat jQueryAJAX 403 dan memberikan contoh kod khusus. 1. membuat

Bagaimana untuk mendapatkan pembolehubah daripada kaedah PHP menggunakan Ajax? Bagaimana untuk mendapatkan pembolehubah daripada kaedah PHP menggunakan Ajax? Mar 09, 2024 pm 05:36 PM

Menggunakan Ajax untuk mendapatkan pembolehubah daripada kaedah PHP adalah senario biasa dalam pembangunan web Melalui Ajax, halaman boleh diperoleh secara dinamik tanpa menyegarkan data. Dalam artikel ini, kami akan memperkenalkan cara menggunakan Ajax untuk mendapatkan pembolehubah daripada kaedah PHP, dan memberikan contoh kod khusus. Pertama, kita perlu menulis fail PHP untuk mengendalikan permintaan Ajax dan mengembalikan pembolehubah yang diperlukan. Berikut ialah kod contoh untuk fail PHP mudah getData.php:

PHP lwn. Ajax: Penyelesaian untuk mencipta kandungan yang dimuatkan secara dinamik PHP lwn. Ajax: Penyelesaian untuk mencipta kandungan yang dimuatkan secara dinamik Jun 06, 2024 pm 01:12 PM

Ajax (JavaScript Asynchronous dan XML) membenarkan menambah kandungan dinamik tanpa memuatkan semula halaman. Menggunakan PHP dan Ajax, anda boleh memuatkan senarai produk secara dinamik: HTML mencipta halaman dengan elemen kontena dan permintaan Ajax menambah data pada elemen selepas memuatkannya. JavaScript menggunakan Ajax untuk menghantar permintaan kepada pelayan melalui XMLHttpRequest untuk mendapatkan data produk dalam format JSON daripada pelayan. PHP menggunakan MySQL untuk menanyakan data produk daripada pangkalan data dan mengekodnya ke dalam format JSON. JavaScript menghuraikan data JSON dan memaparkannya dalam bekas halaman. Mengklik butang mencetuskan permintaan Ajax untuk memuatkan senarai produk.

Bagaimana untuk memuat naik fail ke Nut Cloud Bagaimana untuk memuat naik fail ke Nut Cloud Feb 27, 2024 pm 03:58 PM

Nut Cloud ialah alat pengurusan fail yang cekap khusus untuk menyediakan pengguna dengan perkhidmatan penjimatan dan penyegerakan fail pintar. Ia mempunyai fungsi penyegerakan dan sandaran data yang berkuasa untuk memastikan data pengguna selamat. Satu siri fungsi Nut Cloud direka untuk memenuhi keperluan pengguna dalam senario yang berbeza dan memberikan pengalaman pengguna yang sangat baik. Jadi bagaimana untuk memuat naik fail dalam aplikasi Nut Cloud ini akan memberi anda pengenalan terperinci kepada langkah-langkah saya harap ia dapat membantu semua orang yang memerlukan. Bagaimana untuk memuat naik fail ke Nut Cloud? 1. Pada halaman My Files, klik pada My Nut Cloud untuk membukanya. 2. Pada halaman yang dibuka, klik ikon tambah di penjuru kanan sebelah bawah. 3. Dalam pilihan yang muncul di bahagian bawah, klik Muat Naik daripada kad SD. 4. Dalam storan telefon mudah alih yang dibuka, pilih fail.

See all articles