php - 对使用 json 的正确方法感到困惑

标签 php jquery ajax json

我是 jquery 的新手,昨晚刚开始阅读 json。 我有一个有效的 ajax 调用,它将简单的数据传递给 php 脚本,处理数据并返回单个值。效果很好。

我想来回添加数组和非数组数据的传递,在阅读了一堆文章说 json 是正确的方法之后!!!!但是...还有 json 不安全,...放大括号,不要放大括号 - 使用 json 解码,不要使用它,确保顶部项目是一个对象,有人说在顶部放一个“d”,一些使用序列化,一些不使用它。我是否必须在数据周围加上花括号?或者 Jquery。有些人说还要添加一个指定 application/json 的 header 或其他一些 header ...其他人说它会破坏 IE7...有些人说要添加...

“数据类型”:json

在 ajax 调用中。你明白为什么我现在很困惑吗?

... 和... 在 PHP 中我还必须使用 rawurldecode 吗?在 json 解码之前,因为我的 ajax urlencodes 数据......这太令人困惑了......

我不希望这是一个比现在更大的安全漏洞……我想按照规范正确地做这件事。如果有规范。

谢天谢地,大多数人都说...这是关于您如何使用它(jquery、JSON)等,这使它“安全”。安全……我的意思是,正确使用。客户端没有任何安全的东西。

我确信我所坚持的很简单,但在阅读了 9 个多小时后,我找不到明确的答案。为什么开发语言 (Jquery) 的人不能写一个例子来说明...既然我们已经包含了 json 支持,那么这是正确的方法!?!

是的,我在上面的部分有点罗嗦,因为我之前问过一些简短的问题,并且被否决和批评,并被指责没有研究事情或者当我从不问问题时没有“深入研究”在这里没有至少 5 个多小时的密集阅读、浏览网站等。通常我只在 9 个多小时后才来到这里......

...但是我找到的信息是 splinter 的、陈旧的,而且碎片太多,我想完美地完成它!!! :) 目前为止我找到的最好的网站是用来提取闪烁图片的,但它没有显示如何正确发送,所以我很高兴离开那里找到了这篇文章……但不知道如何将它应用到我的情况中。 ..

请查看我的代码中的注释以获取我需要的提示,甚至更好 - 修复我的代码以便我可以来回发送这 2 个数据,并且在每种语言中你可以为 tmp 变量分配一个值这样我就可以看到你是如何从传递的数据中提取信息的?谢谢...

JQUERY/JS(我的旧代码)(代码片段)

    //Here's some sample data... - HOW DO I SEND THIS AS JSON (please) back and forth?
    var myarray = new Array();
    myarray.push("One");
    myarray.push("Two");
    myarray.push("Three");
    var someOtherData = "helpmeplease";

    $.ajax({
        url: "../../ajax/ajax.php",
        type: 'POST',
        data: ({
            "testarray" : myarray,
            "somemoredata" : someOtherData
        }),
        success: function(results) {
            // what do I do with results?  please alert the 2 passed variables back from php
            // for example alert("Test:" . results[0] . results.someOtherData) or however you
            // access the returned values...

PHP 从 AJAX 接收(我的旧测试代码)

     $test1 = rawurldecode($_POST["somemoredata"]);
     $test2 = rawurldecode($_POST["testarray"]);
     $test3 = testarray[0]; // should be One

PHP 返回

     // please send any data back to the Ajax call 1 array, 1 normal data please and alert
     // the data please so I can see how it's pulled back out...
     return $data; // 1 array, 1 normal variable please

关于我的东西的更多信息...

  • 我的网站是 UTF-8 编码的

  • 我的数据集将小于 4 兆。最有可能低于 20 万。

  • 没有发生跨域的事情

  • 我有一个随机数、每页 token 身份验证系统,效果很好

  • 数据中可以包含哪些内容?任何事物?任何不应包含的符号或东西会破坏 JSON 代码或来回传递数据?

  • 还有其他提示、建议、警告吗?

感谢您的宝贵时间。

最佳答案

没有必要以 JSON 格式发送数据,这意味着要白白包含其他库。您可以使用 jQuery 将数据作为数组发送,并在 PHP 脚本中将其作为数组读取。

例如:

  1. 从 PHP 返回单个变量:

    <script type="text/javascript">
    $(window).load(function(){
        var myarray = new Array();
        myarray.push("One");
        myarray.push("Two");
        myarray.push("Three");
        var someOtherData = "helpmeplease";
    
        $.ajax({
            url: "../../ajax/ajax.php",
            type: 'POST',
            data: ({
                "testarray" : myarray,
                "somemoredata" : someOtherData
            }),
            success: function(results) {
                alert(results);
            }
        });
    });
    </script>
    

    和你的脚本:

    <?php
        $testarray = $_POST['testarray'];
        echo $testarray[0]; // prints One
        $someOtherData = $_POST['someOtherData']; // prints helpmeplease
    ?>
    
  2. 将数据作为数组和其他单个变量返回给 jQuery。

    您添加 dataType: "json" 并以 JSON 格式返回数据:

    <script type="text/javascript">
    $(window).load(function(){
        var myarray = new Array();
        myarray.push("One");
        myarray.push("Two");
        myarray.push("Three");
        var someOtherData = "helpmeplease";
    
        $.ajax({
            url: "../../ajax/ajax.php",
            type: 'POST',
            dataType: 'json',
            data: ({
                "testarray" : myarray,
                "somemoredata" : someOtherData
            }),
            success: function(results) {
                alert(results.somemoredata); // will alert 'helpmeplease'
                alert(results.testarray[1]); // will alert 'Two'
            }
        });
    });
    </script>
    

    和脚本:

    <?php
        // I used the same POST fields, but it can be any other data
        $array = array();
        $array = $_POST['somemoredata'];
        $array = $_POST['testarray'];
        echo json_encode($array); 
    ?>
    

关于php - 对使用 json 的正确方法感到困惑,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12440349/

相关文章:

javascript - 取消选中复选框后重置数据

PHP 正则表达式查找 __ ("STRING_TO_EXTRACT"中包含的字符串)

php - 获取产品自定义属性以在 WooCommerce 产品循环中显示它们

javascript - 有没有办法用 JavaScript 检测移动 Safari 音频中断(耳机拔出)?

javascript - 带有angularJS javascript的动态背景图像

javascript - 可以在ajax调用中传递html元素

php - 从 php 文件获取 Json

php - Laravel Ajax 成功消息 : Returning Contact Form Name Input

php - mysql_affected_rows 找出查询的类型

php - 将图像链接到右侧页面