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

Php 对正确使用json的方法感到困惑,php,jquery,ajax,json,Php,Jquery,Ajax,Json,我是jquery新手,昨晚刚开始阅读json我有一个工作的ajax调用,它将简单数据传递给php脚本,处理数据并返回单个值。非常有效 我想在阅读了大量关于json的文章后,添加数组和非数组数据的来回传递!!!!但是而且json是不安全的。。。放大括号,不要放大括号-使用json解码,不要使用它,确保顶部项目是一个对象,有人说在顶部放一个“d”,有人使用序列化,有人不使用它。我必须在数据周围加上大括号吗?或者Jquery。有些人说还要添加一个指定application/json的头或其他头。。。还

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

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

“数据类型”:json

在ajax调用中。你明白我为什么现在感到困惑了吗

。。。而且。。。在PHP中,我还必须使用rawurldecode吗?在json解码之前,因为我的ajax URL对数据进行编码。。。太令人困惑了

我不希望这是一个比现在更大的安全漏洞。。。我想做它正确和规范。如果有一个规范

大多数人谢天谢地说。。。这是关于如何使用它(jquery、JSON)等,这使它“安全”。通过安全的。。。我是说,使用得当。客户端没有任何东西是安全的

我确信我所坚持的很简单,但在阅读了9个多小时之后,我找不到一个明确的答案。为什么制作语言(Jquery)的人不能写一个例子说。。。现在我们已经包含了json支持,下面是正确的方法

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

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

请查看我的代码中的注释,了解我需要的提示,请或更好-修复我的代码,以便我可以来回发送这两个数据,并使用每种语言为tmp变量赋值,以便我可以查看如何从传递的数据中提取信息?谢谢

JQUERY/JS(我的旧代码)(代码snippits)

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

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兆以下。很可能在200k以下

  • 没有跨域的事情发生

  • 我有一个临时的、每页的令牌身份验证系统,它工作得很好

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

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


谢谢您的时间。

不需要以JSON格式发送数据,这意味着免费包含其他库。您可以使用jQuery以数组的形式发送数据,并在PHP脚本中以数组的形式读取数据

例如:

  • 从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
        // 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); 
    ?>
    
    
    

  • 我没有读过整篇文章,因为它很长,但是你应该看看这个函数。确保以相同的格式(数组或json等)传递和获取变量


    你的问题有点含糊。一般来说,您的问题清楚地传达了一件事:您不知道什么是JSON或如何使用它。因此,答案是“学习”

    一般的回答是:JSON用于数据交换。你如何使用它将完全取决于你在任何特定情况下试图完成什么。例如:

    将javascript对象编码为JSON字符串:

    var myObj = {};
    myObj.aString = 'a string of characters';
    myObj.aList = ['a','b','c'];
    var myJSON = JSON.stringify( myObj );
    console.log( myJSON ); 
    // {"aString":"a string of characters","aList":["a","b","c"]}
    /*    
    note - the function you use varies by browser/javascript engine.
    libraries (jQuery, for example) have methods that can simplify this.
    */
    
    将JSON字符串解码为PHP数组

    $myJSON = '{"aString":"a string of characters","aList":["a","b","c"]}';
    $myArray = json_decode( $myJSON,true );
    print_r( $myArray );
    /*
    Array
        (
        [aString] => a string of characters
        [aList] => Array
            (
            [0] => a
            [1] => b
            [2] => c
            )
        )
    */
    

    好的。首先,考虑JSON最简单的方法是JavaScript对象的序列化表示(或者是一组n维、关联/非关联数组,如果您在PHP中更容易思考的话)

    例如,在PHP中,您可以执行以下操作:

    $albums = array( array( "title" => "Dark Side of the Moon",
                            "artist" => "Pink Floyd",
                            "tracklist" => array( "Speak to Me", "Breathe", "..." ) ),
    
                     array( "title" => "Ten",
                            "artist" => "Pearl Jam",
                            "tracklist" => array( "Once", "Even Flow", "..." ) )
    );
    
    您可以以更紧凑的方式在JavaScript中执行相同的操作,如:

    var albums = [
        {
          title : "Dark Side of the Moon",
          artist : "Pink Floyd",
          tracklist : [ "Speak to Me", "Breathe", "..." ]
        }, {
          title : "Ten",
          artist : "Pearl Jam",
          tracklist : [ "Once", "Even Flow", "..." ]
        }
    ];
    
    这两件事完全一样。
    JSON将序列化数组和对象的集合,使其看起来几乎与JavaScript实现完全相同

    注意1:下面的每个双引号都应该转义,但我真的不想手动转义
    注意2:根据标准,整个过程可能是一个单行双引号字符串,但在这里这样做会破坏语法突出显示,我认为您将从中获得更多

    正如您所看到的,JSON并不真正需要任何模式,除了您自己创建的模式,以满足您的特殊需要。
    在这里,我有一系列的专辑。每个专辑都有一个
    标题
    一个
    艺术家
    和一个
    曲目列表
    ,这是一组歌曲标题。 如果应用程序许可,您可以将
    tracklist
    转换为
    track
    对象数组,每个对象都有自己的歌曲标题和持续时间,并链接到歌词或.mp3或任何您希望它执行的操作

    因为我使用的是对象的索引数组(我不需要在我的相册集合中为每个相册指定一个关联名称-索引数组可以容纳它们),所以JSON字符串被包装在方括号中,与JS数组的包装方式相同(JS数组仅为索引

    与XML相比,它确实是轻量级的

    如果你
    > http://php.net/manual/en/function.json-encode.php
    > http://www.php.net/manual/en/function.json-decode.php
    > http://api.jquery.com/jQuery.parseJSON/
    
    var myObj = {};
    myObj.aString = 'a string of characters';
    myObj.aList = ['a','b','c'];
    var myJSON = JSON.stringify( myObj );
    console.log( myJSON ); 
    // {"aString":"a string of characters","aList":["a","b","c"]}
    /*    
    note - the function you use varies by browser/javascript engine.
    libraries (jQuery, for example) have methods that can simplify this.
    */
    
    $myJSON = '{"aString":"a string of characters","aList":["a","b","c"]}';
    $myArray = json_decode( $myJSON,true );
    print_r( $myArray );
    /*
    Array
        (
        [aString] => a string of characters
        [aList] => Array
            (
            [0] => a
            [1] => b
            [2] => c
            )
        )
    */
    
    $albums = array( array( "title" => "Dark Side of the Moon",
                            "artist" => "Pink Floyd",
                            "tracklist" => array( "Speak to Me", "Breathe", "..." ) ),
    
                     array( "title" => "Ten",
                            "artist" => "Pearl Jam",
                            "tracklist" => array( "Once", "Even Flow", "..." ) )
    );
    
    var albums = [
        {
          title : "Dark Side of the Moon",
          artist : "Pink Floyd",
          tracklist : [ "Speak to Me", "Breathe", "..." ]
        }, {
          title : "Ten",
          artist : "Pearl Jam",
          tracklist : [ "Once", "Even Flow", "..." ]
        }
    ];
    
    [{"title":"Dark Side of the Moon","artist":"Pink Floyd","tracklist":["Speak to Me","Breathe","..."]},
    {"title":"Ten","artist":"Pearl Jam","tracklist":["Once","Even Flow","..."]}]
    
    {"title":"For the Record","artist":"Nerds with Guitars","tracklist":["Sympathy for the Daleks","Hero","Stereotypical"]}
    
    var dataArr = JSON.parse(response),
        dataObj = dataArr[0]; //only object in array
    
    displayTracklist(dataObj);