0

Hi,

I cannot load a URL into a DIV tag using javascript and ajax, all that occurs is the original div text remains in place:

<html>
  <head>
    <title>Ajax Example</title>

  </head>
  <body>
      <center />
      <h1>Loading a web page into a DIV</h1>
      <div id='info'>This sentence will be replaced</div>
      <script>

          params = "url=google.com"
          request = new ajaxRequest()
          request.open("POST", "urlpost.php", true)
          request.setRequestHeader("Content-type",
                "application/x-www-form-urlencoded")
          request.setRequestHeader("Content-length", params.length)
          request.setRequestHeader("Connection", "close")

          request.onreadystatechange = function()
          {
              if (this.readyState == 4)
              {
                  if (this.status == 200)
                  {
                      if (this.responseText != null)
                      {
                          document.getElementById('info').innerHTML =
                              this.responseText
                      }
                      else alert("Ajax error: No data received")
                  }
                  else alert("Ajax error: " + this.statusText)
              }
          }

          request.send(params)

          function ajaxRequest()
          {
              try
              {
                  var request = new XMLHttpRequest()
              }
              catch(e1)
              {
                  try
                  {
                      request = new ActiveXObject("Msxml2.XMLHTTP")
                  }
                    catch(e2)
                    {
                        try
                        {
                            request = new ActiveXObject("Microsoft.XMLHTTP")
                        }
                        catch(e3)
                        {
                            request = false
                        }
                    }
              }
              return request
          }
      </script>
  </body>
</html>

I use a php script to make the server side call:

<html>
    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
        <title></title>
    </head>
    <body>
        <?php // urlpost.php
        if (isset($_POST['url'])) {
            echo file_get_contents("http://".SanitizeString($_POST['url']));
        }

        function SanitizeString($var) {
            $var = strip_tags($var);
            $var = htmlentities($var);
            return stripslashes($var);
        }
        ?>
    </body>
</html>

Can anyone I assist?
I ensured the proxy details are correct to make an external connection also.

Thanks.

Edited by shasta90

2
Contributors
15
Replies
21
Views
4 Years
Discussion Span
Last Post by shasta90
0

I am using an IDE to code javascript.

You don't need to use semi colons unless there is more than one statement on a line.

The syntax is correct, the issue fails when at this error:

else alert("Ajax error: " + this.statusText)else alert("Ajax error: " + this.statusText)

The URL either cannot be retrieved or displayed since it fails to correctly replace the DIV text:

<div id='info'>This sentence will be replaced</div>

Other than the syntax, I need to debug why the URL does not replace the DIV text.

0

If you are using an IDE, can't you just set breakpoints and see what happens? Are you sure that file_get_contents is allowed to open an external URL?

You don't need to use semi colons

Although correct, there are many reasons to use them consistently.

0

I am debugging the file now.

How do I allow:

if (isset($_POST['url'])) {
            echo file_get_contents("http://".SanitizeString($_POST['url']));
        }

"file get contents" access to an external URL?

I am using Netbeans but not sure where the option is in the menu to allow access to an external URL.

0

http://php.net/file_get_contents

Read the tip about the fopen wrappers, it's in the PHP.INI. You may be able to change this if you are running locally. If you are running on a shared web host, this is a feature they will NOT enable. In that case I suggest you use cUrl instead.

0

It is turned on for fopen, am running it locally:

    Directive   Local Value Master Value
allow_url_fopen On          On

Any other suggestions to get it running locally?

0

I am sure that google.com does a redirect. I am not sure that the file_get_contents function follows it. Try it with a specific text file.

0

It works for opening a text file locally in the php file:

echo file_get_contents("/home/user/".($_POST['url']))

and in the javascript file:

params = "url=text.txt"

Then to test opening a remote url I did the following:

I added a user agent call in the php file but no luck

ini_set( Mozilla/5.0 (X11; Ubuntu; Linux i686; rv:11.0) Gecko/20100101 Firefox/11.0);
if (isset($_POST['url'])) {
    echo file_get_contents("http://".SanitizeString($_POST['url']));
    }

Any further ideas to display a remote url?

0

I am trying to integrate it into the php script so that it can read the "params = url" in the javascript file but it doesn't work:

echo "<pre>";
       if (isset($_POST['url'])) {
           $ch = curl_init();
$timeout = 5; // set to zero for no timeout
curl_setopt ($ch, CURLOPT_URL, 'url'); //replaced 'http://example.com' with 'url'
curl_setopt ($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt ($ch, CURLOPT_CONNECTTIMEOUT, $timeout);
$file_contents = curl_exec($ch);
curl_close($ch);

// display file
echo $file_contents("url".SanitizeString($_POST['url']));
        } //replaced "http://" with "url"

        function SanitizeString($var) {
            $var = strip_tags($var);
            $var = htmlentities($var);
            return stripslashes($var);
        }

It doesn't work replacing the specific "http://example.com" with "url" , so as to reference it to the params in the javascript file.

params = "url=w3schools.com"

How can I correctly reference the params = "url=example.com" in the JS file with the curl function in the PHP file?

Edited by shasta90

0

Unfortunately it did not work either:

<?php // urlpost.php
        ini_set('user_agent', 'Mozilla/5.0 (X11; Ubuntu; Linux i686; rv:11.0)
            Gecko/20100101 Firefox/11.0');
        echo "<pre>";

        if (isset($_POST['url'])) {
            $ch = curl_init();
            $timeout = 5; // set to zero for no timeout
            curl_setopt ($ch, CURLOPT_URL, $_POST['url']);
            curl_setopt ($ch, CURLOPT_RETURNTRANSFER, 1);
            curl_setopt ($ch, CURLOPT_CONNECTTIMEOUT, $timeout);
            $file_contents = curl_exec($ch);
            curl_close($ch);

// display file
        echo $file_contents("http://".SanitizeString($_POST['url']));
        }

        function SanitizeString($var) {
            $var = strip_tags($var);
            $var = htmlentities($var);
            return stripslashes($var);
        }
        echo "</pre>";
        ?>

Thanks for your help but I am running out of ideas about configuring "curl" and "file_get_contents" to work.

Could you possibly run the javascript with the php file to see if it works for you?
Remember to change the "params =url" in the JS file.

0

I have managed to get curl working by specifying a curl proxy statement in a separate PHP script, however I want to integrate it into the original "file_get_content" script:

if (isset($_POST['url'])) {
    $agent = $_SERVER["HTTP_USER_AGENT"];
        function file_get_contents_curl() {
    $ch = curl_init($_POST['url']);
    $timeout = 5; // set to zero for no timeout
    curl_setopt ($ch, CURLOPT_URL);
    curl_setopt($ch, CURLOPT_USERAGENT, $agent);
    curl_setopt ($ch, CURLOPT_RETURNTRANSFER, 1);
    curl_setopt($ch, CURLOPT_PROXY, "http://192.168.xx.xx:XXXX");
    curl_setopt($ch, CURLOPT_PROXYPORT, XXXX);
    curl_setopt ($ch, CURLOPT_CONNECTTIMEOUT, $timeout);
    $file_get_contents_curl = curl_exec($ch);
    curl_close($ch);

    // display file
    echo $file_get_contents_curl("http://".SanitizeString($_POST['url']));
        }
    }
    function SanitizeString($var) {
            $var = strip_tags($var);
            $var = htmlentities($var);
            return stripslashes($var);
        }

Is the nesting of the functions correct/in the right order?
As it still does not load when I call with my javacript.

Edited by shasta90: code change

0

Is the nesting of the functions correct/in the right order?

No it's not. You call the function within the function.

0

Finally got it to work by correcting the functions syntax and changing the 'RETURN TRANSFER' to 0:

$agent = $_SERVER["HTTP_USER_AGENT"];
    $timeout = 5; // set to zero for no timeout

    if (isset($_POST['url'])) {
    $ch = curl_init();
    curl_setopt ($ch, CURLOPT_URL, $_POST['url']);
    curl_setopt($ch, CURLOPT_USERAGENT, $agent);
    curl_setopt ($ch, CURLOPT_RETURNTRANSFER, 0);
    curl_setopt($ch, CURLOPT_PROXY, "http://192.168.xx.xx:XXXX");
    curl_setopt($ch, CURLOPT_PROXYPORT, XXXX);
    curl_setopt ($ch, CURLOPT_CONNECTTIMEOUT, $timeout);
    $file_contents_curl = curl_exec($ch);
    curl_close($ch);

    echo $file_contents_curl("http://".SanitizeString($_POST['url']));
    }
    function SanitizeString($var) {
            $var = strip_tags($var);
            $var = htmlentities($var);
            return stripslashes($var);
        }
This question has already been answered. Start a new discussion instead.
Have something to contribute to this discussion? Please be thoughtful, detailed and courteous, and be sure to adhere to our posting rules.