我目前正在一个项目工作,我想我不太了解ajax的工作原理。
所以这就是我想做的事。
我有一个页面(list.php),默认情况下会显示一个成员列表(包含图片等,因此它有点像HTML重)。
我也有一个过滤器,所以当我点击过滤器按钮时,我想在db查询中使用该过滤器更改内容。
我知道我可以使用jQuery $ .ajax将过滤器值发送到 EXTERNAL (updatelist.php)文件,运行查询并将内容作为json返回,然后使用$ .each呈现新页面内容。
我的问题是:还没有其他方法可以做到这一点吗?也许在页面加载时通过将文件(updatelist.php)包含到主页面(list.php)中运行php函数然后当我单击过滤器按钮发送和ajax请求到同一个(list.php)时只有php函数名?
我试过这个但是PHP代码根本没有运行,所以我想我对php的工作方式有一个模糊的理解。
我的猜测是,加载到一个页面的php仅在页面加载时执行,我无法再次运行它,因此我必须有一个呈现内容的EXTERNAL文件。
有人可以清除所有这些吗?
就这样你知道我找到了答案,但所有人都说同样的话,我需要ajax,但没有人完全回答我的问题。
感谢您的时间。
代码:
$('.test').click(function() {
var data = [];
data.push({name: 'functionName', value: "functionName"});
$.ajax({
type: 'POST',
url: '/list.php',
data: data,
dataType: 'text',
success: function(html) {
}, error : function(e){
alert("ajax error");
}
}).done(function(done) {
});
});
HTML / PHP:
<a class="test">test</a>
<?php
include ( $_SERVER['DOCUMENT_ROOT'] . "/updatelist.php");
?>
updatelist.php内容
if ( isset($_POST["functionName"]) ) {
functionName();
}
答案 0 :(得分:2)
我的猜测是,加载到一个页面的php只在页面上执行 加载,我不能再次运行它所以我必须有一个EXTERNAL文件 呈现内容。
那是完全正确的。 PHP在服务器端上运行。
例如:用户请求list.php
<?php ?>
之间的所有内容并将输出写入文件中(当然,不是原始文件,这个例子只是为了让您基本了解它是如何工作的) 您可能会问为什么PHP代码也不会被发送。对此有任何简单的解释:由于PHP执行服务器端的操作,它还会执行连接到数据库等操作。现在,如果数据库连接也将发送到客户端,则进行映像。他只需要将文件保存到他的硬盘中,用文本编辑器打开它,他就可以看到你的整个数据库连接细节,包括密码。
AJAX现在所做的是将第二个请求发送到服务器,在那里它可以处理所请求的信息(可能再次连接到数据库)并将其发送回客户端(采用JSON格式)。 在客户端,JSON-Data再次被JavaScript解析并显示在页面上。
您是否有特殊原因不喜欢使用AJAX?它功能非常强大,您可以使用它创建一个高度动态的页面。 也许给我们更多详细信息,你真的想做什么,我确定有一个解决方案,甚至可能用AJAX;)
答案 1 :(得分:1)
您可能链接到同一个文件,但为什么要这样做呢?将json放在不同的文件中是不是更好?
要这样做;您可以使用$_GET[]
变量,例如$_GET['json']
。在list.php文件的顶部,添加:
if(isset($_GET['json'])){
//show JSON results from 'updatelist.php'
exit;
}
然后在你的AJAX调用链接中找到'list.php?json = true',它应该可以工作。
答案 2 :(得分:1)
是的还有另一种方式, 虽然我强烈建议解析Json并构建内容,因为您将拥有更多控制权,您可以绑定事件等。 如果你想要的是更新一个div,你只需要获取一个只有div的php文件并替换内容。
假设您有一个div #myDiv,您可以使用jquery load
$("#myDiv").load("/phpWithJustDivOnIt.php?someQueryParamIfYouneed");
将处理过的php文件的内容放在div
中