所以我一直在网上挖掘,发现jQuery AJAX解决方案最适合我想要做的事情。
我发现jquery.ajax()和jquery.post()被提及最多。
然而,我发现的信息非常全面,老实说,我有点迷路了!
我需要创建一个简单的按钮,它将充当切换开关。它需要将数据POST到PHP脚本中,该脚本将处理数据并返回true或false。按钮应相应地显示已设置或未设置。
问题是,结果还取决于数据库查找返回true或false,我需要安全地从$_SESSION获取信息。由于javascript是客户端,所以我不喜欢将这些数据输出到用户可以访问的东西中。我的问题是,我可以从"被调用"的PHP文件中访问会话吗?它仍然可以正常工作(就像include一样?)。
这是我发现的最好的基本代码,但不安全,可能不正确。。
$("#mydiv").click(function(){
var button = $(this) ;
if (!button.hasClass('active')) {
$.post("ajax.php", { user: "2", action: "start" },
function(data){
button.addClass('active');
button.html("End") ;
}
);
}
else {
$.post("ajax.php", { user: "2", action: "stop" },
function(data){
button.removeClass('active');
button.html("Start") ;
}
);
}
});
会话变量将在您调用的php脚本中可用。请注意,$.post()
-函数是异步的,并且有一个回调参数,在本例中称为data
。这个回调变量将在$.post()
调用的php脚本中存储您所回显的内容。
现在,您可以验证东西并做任何您喜欢的事情(顺便说一句,出于安全原因,验证应该始终在php文件中进行,而不是在javascript中!)。
一个想法是在验证后在php文件中回显"true"
或"false"
,然后退出php脚本,例如:
<?php
//validate here and store success in boolean $success
if($success==true){ echo "true"; exit; }
else{ echo "false"; exit; }
?>
然后,javascript回调参数data
的值将为"true"
或"false"
。您可以像javascript中的任何其他变量一样简单地访问该变量,并根据其值执行操作。
一种解决方案可能是:
$("#mydiv").click(function(){
var button = $(this) ;
if (!button.hasClass('active')) {
$.post("ajax.php", { user: "2", action: "start" },
function(data){
if(data=="true"){
button.addClass('active');
button.html("End");
}
}
);
}
else {
$.post("ajax.php", { user: "2", action: "stop" },
function(data){
if(data=="true"){
button.removeClass('active');
button.html("Start");
}
}
);
}
});
这就行了。如果您需要返回几个数据点,例如一个具有属性的对象,请检查JSON。
您可以从调用的php脚本中安全地访问$_SESSION。
我假设您在php脚本上打印的是true还是false。在这种情况下,您可能希望在回调函数中添加if语句。数据包含php脚本的返回。
如果PHP脚本的答案是成功/错误,请考虑使用HTTP标头来指示这一点,例如
失败时,渲染:
标头("HTTP/1.0 406不可接受");
这使您在jquery中的生活变得简单,因为您可以只编写成功和错误的处理程序。
至于Session,它应该可以找到,浏览器在发出AJAX请求时会传递会话cookie,PHP会正确加载会话。。
你可以用这样的东西修改上面的代码:
$.ajax({
url: 'http://blarg.com',
data: { your post data },
success: function(data) { do something },
error: function(o,textStatus) { do Error }
});
查看API了解更多详细信息:http://api.jquery.com/jQuery.ajax/