0

所以我一直在网上挖掘,发现 jQuery AJAX 解决方案最适合我想做的事情。

我发现 jquery.ajax() 和 jquery.post() 被提及最多。

但是我找到的信息非常全面,老实说,我有点迷路了!

我需要创建一个简单的按钮,它将充当切换开关。它需要将数据 POST 到 PHP 脚本,该脚本将处理它并返回 true 或 false。该按钮应显示设置,或相应地取消设置。

这是障碍,结果还取决于返回 true 或 false 的数据库查找,我需要安全地从 $_SESSION 获取信息。由于 javascript 是客户端,我不热衷于将这些数据输出到用户可以访问的内容中。我的问题是,我可以从“被调用”的 PHP 文件中访问会话,并且它仍然可以正常工作(比如包含?)。

这是我发现的最好的基本代码,但不安全并且可能不正确..

$("#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") ;
        }
    );
}


});
4

3 回答 3

1

您可以从调用的 php 脚本中安全地访问 $_SESSION。

我假设您在 php 脚本上打印的是真还是假。在这种情况下,您可能需要在回调函数中添加 if 语句。数据包含php脚本的返回。

于 2012-09-11T23:17:44.907 回答
1

会话变量将在您调用的 php 脚本中可用。请注意,$.post()-function 是异步的,并且有一个回调参数,在您的情况下称为data. 此回调变量将存储您在 php 脚本中调用的任何内容$.post()

现在,您可以验证内容并做任何您喜欢的事情(顺便说一句,出于安全原因,验证应该始终在您的 php 文件中进行,而不是在 javascript 中进行!)。

一种想法是在验证后回显"true""false"在您的 php 文件中回显,然后退出 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

于 2012-09-11T23:58:08.103 回答
0

如果 PHP 脚本的答案是成功/错误,请考虑使用 HTTP 标头来指示这一点,例如

失败时,渲染:

header("HTTP/1.0 406 不可接受");

这使您在 jquery 中的生活变得轻松,因为您可以编写成功和错误的处理程序。

至于会话,它应该可以找到,浏览器在发出 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/

于 2012-09-11T23:20:55.493 回答