混淆了使用json的正确方法

Per*_*yCS 6 php ajax jquery json

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

我想要来回添加数组和非数组数据的传递,并在阅读成堆文章后说json是要走的路!!!! 但是......也就是json不安全,...戴上牙套,不要戴牙箍 - 使用json解码,不要使用它,确保顶部物品是一个物体,有人说把"d"放在顶部,有些使用序列化,有些则不使用它.我是否必须在数据周围放置curley括号?或者是Jquery.有些人说还添加了一个标题,指定了application/json或其他一些标题......其他人说它打破了IE7 ...有些人说要添加......

"dataType" : json

在ajax电话中.你知道为什么我现在感到困惑吗?

... ...在PHP中我还必须使用rawurldecode吗?在json解码之前,因为我的ajax urlencodes数据...它太混乱......

我不希望这是一个比现在更大的安全漏洞...我想要正确地做到和SPEC.如果有规格.

谢天谢地,大多数人都说...这是关于你如何使用它(jquery,JSON)等,这使它"安全".安全......我的意思是,使用得当.客户端没有任何东西是安全的.

我坚持的很简单我很确定但是在阅读超过9个小时后我找不到明确的答案.为什么不能使这些语言的人(Jquery)写一个例子说...现在我们已经包含了json支持,这是正确的方法!

是的,我在这个最重要的部分有点罗嗦,因为我之前已经提出过短期问题并且遭到了抨击和批评,并被指责没有研究或者没有"充分研究",当我从来没有在这里问过问题时至少5个多小时的激烈阅读,扫描网站等等.通常我只会在9个多小时后来到这里...

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

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

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

    //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...
Run Code Online (Sandbox Code Playgroud)

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

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

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
Run Code Online (Sandbox Code Playgroud)

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

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

  • 我的数据集将低于4兆.最有可能在20万以下.

  • 没有跨领域的东西发生

  • 我有一个nonce,每页令牌认证系统,工作得很好

  • 什么可以进入数据?什么吗?是否应该包含哪些符号或内容会破坏JSON代码或来回传递数据?

  • 任何其他提示,建议,警告?

感谢您的时间.

Mih*_*rga 5

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

例如:

  1. 从PHP返回单个var:

    <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>
    
    Run Code Online (Sandbox Code Playgroud)

    和你的脚本:

    <?php
        $testarray = $_POST['testarray'];
        echo $testarray[0]; // prints One
        $someOtherData = $_POST['someOtherData']; // prints helpmeplease
    ?>
    
    Run Code Online (Sandbox Code Playgroud)
  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>
    
    Run Code Online (Sandbox Code Playgroud)

    和脚本:

    <?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); 
    ?>
    
    Run Code Online (Sandbox Code Playgroud)