Uploading Files with AJAX - Treehouse Blog. The introduction of AJAX marked a huge leap forward in the history of the web.
The ability to communicate with a web server without reloading the page has revolutionised how web applications are built. The primary technology that enables AJAX (XMLHttp. Requests) has evolved significantly since the initial conception of dynamic websites. A nice feature added to XMLHttp. Requests in recent years is the ability to handle file uploads.
Traditionally many developers have resorted to using technologies like Flash to upload files to a server. The problem with this approach is that the user needs to have a third- party browser plugin installed. In this post you’ll learn how to upload files to a server using native Java.
Script technologies. The example we’re going to use supports uploading multiple files in a single request. However, you can apply the same principles to single- file uploads too. Lets get started! Selecting Files to Upload.
The first thing you need to do is set up your HTML form that will allow the user to select the file(s) that they wish to upload. To keep things simple lets use a standard < input> element with the file type.< form id="file- form" action="handler. POST">. < input type="file" id="file- select" name="photos" multiple/>. Upload< /button>.
Notice that the < input> element includes the multiple attribute. This will allow the user to select multiple files from the file picker launched by the browser. If you don’t specify this attribute the user can only select one file. Now that you’ve got your HTML form set up lets take a look at the Java. Script code that will handle the file upload.
Uploading Files to the Server. First of all you need to create three variables that hold references to the < form> , < input> , and < button> elements in your HTML markup. Element. By. Id('file- form'). Select = document. Element. By. Id('file- select'). Button = document. Element. By. Id('upload- button'); Next you need to attach an event listener to the form’s onsubmit event.
Default(). // Update button text. Button. inner. HTML = 'Uploading..'. The rest of the code will go here.. Inside the event listener you start by calling prevent. Default() on the event object passed into the handler. This will prevent the browser from submitting the form, allowing us to handle the file upload using AJAX instead.
Next you update the inner. HTML property on the upload. Button to Uploading.. This just provides a bit of feedback to the user so they know the files are uploading.
Your next job is to retrieve the File. List from the < input> element and store this in a variable. You can do this by accessing the files property.// Get the selected files from the input.
Select. files; You then create a new Form. Data object. This is used to construct the key/value pairs which form the data payload for the AJAX request.// Create a new Form.
Data object. var form. Data = new Form. Data(); Your next job is to loop through each of the files in the files array and add them to the form. Data object you just created. You’ll also want to check that the user has selected the type of file you’re expecting.// Loop through each of the selected files.
Check the file type. Add the file to the request. Data. append('photos', file, file.
Here you’re first fetching the current file from the files array and then checking to make sure it’s an image. The file’s type property will return the file type as a string.
You can therefore use the Java. Script match() method to ensure that this string matches the desired type. If the file type does not match, you skip the file by calling continue. You then use the append method on the form.
Data object to add this file to the data payload. The Form. Data. append() method is used to handle Files, Blobs, or Strings.// Files. Data. append(name, file, filename). Data. append(name, blob, filename).
Data. append(name, value); The first parameter specifies the name of the data entry. This will form the key in the data payload.
The second parameter specifies either a File, Blob, or String that will be used as the value for the data entry. When appending a File or Blob you can also specify a filename, but this isn’t required. Next you need to set up the XMLHttp. Request that is responsible for communicating with the server. To do this you first need to create a new XMLHttp.
Request object.// Set up the request. XMLHttp. Request(); You now need to create a new connection to the server.
You do this using the open method. This method takes three parameters. The HTTP method, the url that will handle the request, and a boolean value that determines whether the request should be dealt with asynchronously.// Open the connection. POST', 'handler. php', true); Next you need to set up an event listener that will be triggered when the onload event is fired.
Examining the status property of the xhr object will tell you if the request completed successfully.// Set up a handler for when the request finishes. File(s) uploaded. Button. inner. HTML = 'Upload'. An error occurred!'). All that’s left to do now is send the request. Pass the form. Data object to the send method which is available on the xhr object.// Send the Data. Data); That’s everything you need to know to start uploading files using AJAX.
Your server- side code will need to extract the files from the request and process them as desired. Browser Support. Browser support for the technologies used in this post is generally good. Internet Explorer being the only exception. You will be okay with IE 1. IE didn’t include support for some of the XMLHttp.
Request features covered in this post. IEFirefox. Chrome. Safari. Opera. 10.
Summary. In this post you’ve learned how to upload files to a web server using native Java. Script technologies. The advancement in functionality of XMLHttp. Requests has eliminated the need for developers to use third- party browser plugins to handle file uploads.
This is good as native browser features are often faster and more secure than those provided by a plugin. How do you plan to use AJAX file uploads in your projects? Share your thoughts in the comments below.
Uploading files using xhr. Form. Data) to PHP server Â· Git.