Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/425.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/242.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 安全ajaxdiv更新_Javascript_Php_Jquery_Ajax_Php Include - Fatal编程技术网

Javascript 安全ajaxdiv更新

Javascript 安全ajaxdiv更新,javascript,php,jquery,ajax,php-include,Javascript,Php,Jquery,Ajax,Php Include,我对AJAX很陌生,所以如果这是一个愚蠢的问题,请原谅我: 我想用一个php文件的内容更新一个div,该文件位于一个受保护的文件夹中,因此它只能包含在一个php文件中,而不能从浏览器寻址。 因为JavaScript是客户端的,这意味着我不能调用它,对吗 例如,我使用以下代码获得index.php(包括jQuery): $(“#content”).load(“includes/login.php”); 其中#content指的是一个div。这样做很好,但由于include不应可访问,因此会产生

我对AJAX很陌生,所以如果这是一个愚蠢的问题,请原谅我:

我想用一个php文件的内容更新一个div,该文件位于一个受保护的文件夹中,因此它只能包含在一个php文件中,而不能从浏览器寻址。 因为JavaScript是客户端的,这意味着我不能调用它,对吗

例如,我使用以下代码获得index.php(包括jQuery):


$(“#content”).load(“includes/login.php”);
其中#content指的是一个div。这样做很好,但由于include不应可访问,因此会产生问题

然后我想我可以在可访问区域中放置类似“wrapper.php”的东西,然后根据您提供的变量包含特定的php文件


这是正确的方法还是我做错了?

如果你想偷懒,你可以通过
load
加载整个页面,并解析内容以获取
\content

jQuery将按空格分割参数,并使用第二个元素作为整个页面内容的选择器

$("#content").load("full/path/to/login #content");

没有仇恨者,我说这是一种懒惰的方法。

我认为
包装器.php的想法是正确的。如果要将它用于许多文件,可以执行以下操作,检查它是否是AJAX调用,以防止直接加载文件:

// wrapper.php
<?php
// Check if it is AJAX
if (isset($_SERVER['HTTP_X_REQUESTED_WITH'])
AND strtolower($_SERVER['HTTP_X_REQUESTED_WITH']) === 'xmlhttprequest') {
    $filename = $_GET['f'];
    include 'includes/'.$filename.'.php';
}

但是要小心,因为这可能是不安全的。

你的方法是正确的继续。是的,你可以使用包装器来完成,但这不完全违背一开始就无法访问includes的观点吗?嗯,客户端无法访问includes文件夹,例如,您无法获得类似www.example.com/includes/login.php的内容,您只能访问example.com。服务器端脚本可以包含来自/includes的文件,因为它们是Server-side.OP谈论安全性您所谈论的内容是正确的,但不适用于此上下文。好的,这就是我想要它做的,但您是对的,我可以直接转到example.com/wrapper.php,在没有周围index.php的情况下加载内容,对吗?所以我想我只需要在index.php中放入一个变量,比如$wrappedcall=1,如果$wrappedcall为1,则在wrapper.php测试中,如果不是什么都不做。可以吗?我更新了我的答案。您可以使用像
$wrappedcall
这样的变量,也可以检查它是否是AJAX调用,因此永远不会直接加载文件。
// wrapper.php
<?php
// Check if it is AJAX
if (isset($_SERVER['HTTP_X_REQUESTED_WITH'])
AND strtolower($_SERVER['HTTP_X_REQUESTED_WITH']) === 'xmlhttprequest') {
    $filename = $_GET['f'];
    include 'includes/'.$filename.'.php';
}
$("#content").load("wrapper.php?f=login");