9

I have a requirement where I need to retrieve all the filenames from a folder in client side.

Hence I am trying to retrieve the names of the files in a folder using Jquery referring to this answer.

My code is as follows:

    <script>
        var fileExt = ".xml";

        $(document).ready(
        function(){
            $.ajax({
            //This will retrieve the contents of the folder if the folder is configured as 'browsable'
            url: 'xml/',
            success: function (data) {
               $("#fileNames").html('<ul>');
               //List all xml file names in the page
               $(data).find('a:contains(" + fileExt + ")').each(function () {
                   var filename = this.href.replace(window.location, "").replace("http:///", "");
                   $("#fileNames").append( '<li>'+filename+'</li>');
               });
               $("#fileNames").append('</ul>');
             }     
            });
        });

    </script>

HTML code is as follows:

<div id="fileNames"></div>

But I get the following error when I run the code in chrome and firefox:

chrome: XMLHttpRequest cannot load file:///E:/Test/xml/. Received an invalid response. Origin 'null' is therefore not allowed access.

Firefox: ReferenceError: $ is not defined

I have tried googling a lot but the error is not resolved.

Your help would highly be appreciated.

Community
  • 1
  • 1
iQuestProgrammer
  • 309
  • 2
  • 5
  • 18
  • 2
    Regarding this bit `Firefox: ReferenceError: $ is not defined` - are you absolutely sure that jQuery is loaded? – kalatabe Mar 30 '15 at 07:35
  • I am using - the google's jquery cdn link to load it – iQuestProgrammer Mar 30 '15 at 07:37
  • 3
    Also, you cannot make AJAX requests to local file locations. You need to make the request to a web server, either running on your machine or remotely. – Rory McCrossan Mar 30 '15 at 07:37
  • 1
    @Rory McCrossan: Good point.. Then to access local file locations is there any way out using javascript / any client side program. – iQuestProgrammer Mar 30 '15 at 07:39
  • Check this out: http://stackoverflow.com/questions/371875/local-file-access-with-javascript or http://stackoverflow.com/questions/18251432/read-a-local-file-using-javascript-html5-file-api-offline-website or http://www.html5rocks.com/en/tutorials/file/dndfiles/ – choudhury smrutiranjan parida Mar 30 '15 at 07:44

2 Answers2

8
<html>
<body>
    <div id='fileNames'></div>
</body>
<script src="js/jquery.js"></script>

<script type="text/javascript">
    $(document).ready(function () 
    {
        $.get(".", function(data) 
        {
            $("#fileNames").append(data);
        });
    })
</script>

this will print all the files in a folder on webpage.

Bhushan Pawar
  • 451
  • 4
  • 13
3

It looks like you are running it by double clicking on html file. So it will run in browser with file protocol. You have to run it from server like http://localhost/myhtml.html.

I have tried code in my system, it's working with server.

Plus

you have syntax error in below line

$(data).find('a:contains(" + fileExt + ")').each(function () {
        

replace above with this

$(data).find("a:contains(" + fileExt + ")").each(function () {

I'm on ubuntu system, and with chrome browser, you do not need to replace location. because it is returning relative path to location.

UPDATE

Your final code should look like this

<script type="text/javascript">//<![CDATA[
$(window).load(function(){
   var fileExt = ".xml";

        $(document).ready(function(){

            $.ajax({
                //This will retrieve the contents of the folder if the folder is configured as 'browsable'
                url: 'xml/',
                success: function (data) {
                    console.log(data);
                   $("#fileNames").html('<ul>');
                   //List all xml file names in the page

                    //var filename = this.href.replace(window.location, "").replace("http:///", "");
                   //$("#fileNames").append( '<li>'+filename+'</li>');

                    $(data).find("a:contains(" + fileExt + ")").each(function () {
                        $("#fileNames").append( '<li>'+$(this).text()+'</li>');
                    });
                    $("#fileNames").append('</ul>');
                }
            });

        });
});
//]]>
</script>
Community
  • 1
  • 1
shyammakwana.me
  • 5,562
  • 2
  • 29
  • 50