真正基础的AJAX(PHP,jQuery)


Really basic AJAX (PHP, jQuery)

所以我一直在网上挖掘,发现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/