简体   繁体   中英

JQuery and php-Problem with file_get_contents() after $.ajax

I would like to load a error.html-file after clicking a html-button. Therefore, I have a website with a button and the corresponding click-event.

$.ajax(
        {
            type: "POST",
            url: "../../../server/check.php",
            data: "login=granted&user=user&site=overview",

            success: function(msg)
            {
                alert(msg); 
            }
        });

In this click event I use $.ajax to call a check.php-script that should load my html file via file_get_contents(). Here's the complicated php-Code:

<?php $homepage = file_get_contents('../client/manage/login/error.html'); echo $homepage; ?>

Now the problem is that error.html isn't loaded, instead the html-code is returned to the $.ajax call. If i type the url of the check.php directly into the browser, it works.

I know there are several approaches how to load a html file, but I need to do it exactly this way. Actually, there are several other sites that I want to load via this php-script.

Can someone give me a hint please?

Thanks much.

EDIT: OK, I try to be a bit more specific. I've successfully implemented a login-system. This system consists of two html-input fields, one for the username and one for the password. Both are checked against a database. If both are correct, the user is allowed to access some protected html-sites.

Now I wanted to avoid that a user can directly put the urls of the protected sites into the browser's address bar; therefore I created a .htaccess file and forced every request of a protected html site with the help of mod_rewrite to be redirected to the check.php. Here's the .htaccess:

RewriteEngine On
RewriteBase /simulation/client/manage 
RewriteRule ^([a-zA-Z]+)\.html$ ../../server/check.php?page=$1 [L]

You see, all protected html files are in /simulation/client/manage, this is the path where are all protected sites are in. If a user wants to redirect to one of them, he is sent to check.php with the corresponing site he or she wants to access. Here's the php code:

if(strcmp($_POST["login"],"granted") == 0)
{
    $_SESSION['user'] = $_POST["user"];
}
else if(strcmp($_POST["logout"],"logout") == 0)
{
    session_unset();
    $_SESSION=array();
}

if(!isset($_SESSION['user']))
{
        $homepage = file_get_contents('../client/manage/login/error.html');
        echo $homepage;
}
else
{
        $homepage = file_get_contents('../client/manage/'.$page.'.html');
        echo $homepage;
}

So far, so good. In this check.php I check if session-variables are set. They are set only if a user has successfully logged in. If not, the error.html is loaded. This all works well, if a user types the url of one of the protected pages into the browser and is not logged in, file_get_contents loads the error.html page, otherwise one of the protected pages is loaded.

The only problem is that if I call the script via $.ajax, nothing is loaded.

That is the intended behavior of an AJAX call. You are requesting the contents of that URL (your PHP script). If I understand your need correctly you could insert the returned html into the body of the page:

$.ajax(
        {
            type: "POST",
            url: "../../../server/check.php",
            data: "login=granted&user=user&site=overview",

            success: function(msg)
            {
                $('body').html(msg);//ADDED LINE
            }
        });

Ok, in my opinion the best solution for this problem is to read the file with read_file() in php and catch the html-code in the browser. Then I user the following three commands in the ajax success callback function:

$.ajax(
    {
        type: "POST",
        url: "../../../server/check.php",
        data: "login=granted&user=user&site=overview",

        success: function(msg)
        {
           document.open();
       document.write(msg);
       document.close();
        }
    });

This solution is nearly the same as Jake's, but here you can replace the entire document. Thanks for your help anyway.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM