Dojo_user
Dojo_user

Reputation: 281

Read and display the text file contents upon click of button using Javascript

On click of a button called result, I want to read and display a text file (which is present in my local drive location say: C:\test.txt) using Javascript function and display the test.txt file contents in a HTML text area.

I am new to Javascript,can anyone suggest the code for Javascript function to read and display the contents of .txt file?

Upvotes: 2

Views: 22259

Answers (4)

Logixor
Logixor

Reputation: 69

We could achieve this by, I should say, creating a virtual file!

Storing the contents of the text file into a Javascript string variable. However, one should consider all new lines and other special symbols\characters and etc.!

We than can markup a script tag in our HTML to load that *.js Javascript like this:

<script src="my_virtual_file.js"></script>

The only difference here is that a text file that could contain:

Goodnight moon
Follow the white rabbit

In a Javascript script string variable should look like this:

var my_virtual_file = "Goodnight moon\nFollow the white rabbit";

Later on, you can access this variable and treat it as you wish...

A programming language like Javascript that follows standards like ECMAScript, gives you a wide range of capabilities to treat and convert data from one type into another.

Once you have your Javascript script loaded, you can then access that variable by any button in your HTML by assigning a function call on its onclick attribute like this:

<button onclick="MyVirtualFile()"></button>

And ofcourse, you just add a script tag to your HTML, like this:

<script>
    functiion MyVirtualFile(){
        alert(my_virtual_file);
    };
</script>

... or your may just create and import another Javascript script containing that same function, under your desire.

If you are concerned about how much information you can store into a Javascript string variable, just take a look at this interesting (and old as this one :D) SO thread.

Lets see if this snippet works :):

var my_virtual_file = "Goodnight moon\nFollow the white rabbit"

function MyVirtualFile(){
    alert(my_virtual_file);
    // Do anything else with your virtual file
};
<!DOCTYPE html>
<html>

<head>
    <script src="my_virtual_file.js">
    </script>
</head>
<body>

  <h1>HTML Javascript virtual file</h1>
  <button onclick="MyVirtualFile()">Alert my_virtual_file</button>

</body>

</html>

You can programatically access and dynamically change the contents of your Javascript script, but you should remind that you need to reload your HTML so the browser can load the new contents.

On your filesystem, you can just treat this *.js as a *.txt file, and just change its contents keeping in mind the Javacript.

Upvotes: 0

blex
blex

Reputation: 25634

An Ajax request to a local file will fail for security reasons.

Imagine a website that accesses a file on your computer like you ask, but without letting you know, and sends the content to a hacker. You would not want that, and browser makers took care of that to protect your security!

To read the content of a file located on your hard drive, you would need to have a <input type="file"> and let the user select the file himself. You don't need to upload it. You can do it this way :

<input type="file" onchange="onFileSelected(event)">
<textarea id="result"></textarea>

function onFileSelected(event) {
  var selectedFile = event.target.files[0];
  var reader = new FileReader();

  var result = document.getElementById("result");

  reader.onload = function(event) {
    result.innerHTML = event.target.result;
  };

  reader.readAsText(selectedFile);
}

JS Fiddle

Upvotes: 7

Maurice Perry
Maurice Perry

Reputation: 32831

As You've mentionned HTML, I assume you want to do this in a browser; Well the only way to access a local file in a browser is by using the File API, and the file can only be obtained via a user's manipulation such selecting a file in an <input type='file'> element, or drag&dropping a file in your page.

Upvotes: 0

Xanarus
Xanarus

Reputation: 775

Using $.ajax() function: http://api.jquery.com/jQuery.ajax/

$(function(){
    $.ajax({
        url: "pathToYourFile",
        async: false,   // asynchronous request? (synchronous requests are discouraged...)
        cache: false,   // with this, you can force the browser to not make cache of the retrieved data
        dataType: "text",  // jQuery will infer this, but you can set explicitly
        success: function( data, textStatus, jqXHR ) {
            var resourceContent = data; // can be a global variable too...
            // process the content...
        }
    });
});

Upvotes: 3

Related Questions