将json从javascript发送到php

将json从javascript发送到php,javascript,php,jquery,json,post,Javascript,Php,Jquery,Json,Post,我有一个页面,用户在其中做一些事情,在选择next时,我想将他们重定向到一个名为Step2.php的php文件以及一些JSON信息 我构建了json字符串,它如下所示: [{"name":"IMG_20130726_182336.jpg","size":2280709,"type":"image/jpeg","width":null,"height":null,"lastModified":1374852216000,"fileExtension":"jpg","orientation":1,"

我有一个页面,用户在其中做一些事情,在选择next时,我想将他们重定向到一个名为Step2.php的php文件以及一些JSON信息

我构建了json字符串,它如下所示:

[{"name":"IMG_20130726_182336.jpg","size":2280709,"type":"image/jpeg","width":null,"height":null,"lastModified":1374852216000,"fileExtension":"jpg","orientation":1,"displayed":true,"attributes":[{"title":"Name: ","value":"IMG_20130726_182336.jpg"},{"title":"Date: ","value":"no date"}]}]
现在,我通过jquery帖子将其发送如下:

jsonData = JSON.stringify(serializableAttributes);
    console.log(jsonData);
    $.ajax({
        type: 'POST',
        url: 'Step2.php',
        data: {"jsonData" : jsonData},
        success: function(msg) {
            console.log("Json Sent! " +msg);
            window.location("")
        },
        error: function(request,msg){
            console.log("Error : " + msg);
        }
    });
if(isset($_POST["jsonData"])) {
    $json = $_POST["jsonData"];
    var_dump(json_decode($json, true));
} else {
    echo "NO";
}
问题:为什么我的Step2.php文件中没有任何内容?我是否错误地将用户重定向到该页面

Step2.php文件中的代码如下所示:

jsonData = JSON.stringify(serializableAttributes);
    console.log(jsonData);
    $.ajax({
        type: 'POST',
        url: 'Step2.php',
        data: {"jsonData" : jsonData},
        success: function(msg) {
            console.log("Json Sent! " +msg);
            window.location("")
        },
        error: function(request,msg){
            console.log("Error : " + msg);
        }
    });
if(isset($_POST["jsonData"])) {
    $json = $_POST["jsonData"];
    var_dump(json_decode($json, true));
} else {
    echo "NO";
}

它总是显示NO.

你不能这样做。这不是AJAX和POST的工作方式

如果您只是想访问Step2.php,请尝试将其作为URL的一部分发送到页面

不使用AJAX函数,只需执行以下操作:

var jsonData = [YOUR DATA]; 
window.location.href="Step2.php?json="+jsonData
或者,如果PHP创建了JSON字符串,则可以将其存储为会话变量

编辑:在会话变量路由上再冒险一点

让AJAX脚本保持原样,但创建一个新的PHP文件。在本例中,我们将其称为foo.php。将foo.php文件设置为:

session_start();
if($_POST){
    if(isset($_POST['jsonData'])){
        $json = $_POST['jsonData'];
        $_SESSION['jsonData'] = $json;
        //CREATE A JSON RESPONSE INIDCATING SUCCESS
        echo '{ "success" : 1 }';
    }
}
AJAX调用的SUCCESS函数可以分析成功代码的响应。如果是1,则重定向到Step2.php页面


只需确保您在每页的顶部调用session\u start即可。

好的,所以我认为您误解了AJAX的工作原理。您的ajax请求将json发送给您的php,然后应该以适当的返回响应它,在您的例子中是一个var_转储

这根本不会在php中保存json,如果您在没有POST请求的情况下请求php文件,那么除了输出之外,您不会得到任何其他内容,因为您没有发送POST数据


如果您确实想向php发送json,那么您可以执行现在正在执行的操作,并聆听您可以在检查器中看到的请求响应。我不清楚您最终希望如何处理这些数据,因此我不知道这是否正确。

请在我的工作中尝试以下代码:

<?php
if(isset($_POST["jsonData"])) {
    $json = $_POST["jsonData"];
    $json = str_replace('\\', '', $json);
    var_dump(json_decode($json, true));
    print_r($json);
} else {
    echo "NO";
}
?>
您可以将JSON发布到PHP

PHP,您只需解析:

if(isset($_POST['json'])){
   $json = $_POST['json'];
   $data = json_decode($json);
   $image = $data[0];
   echo $image->name;

   $atributes = $image->attributes;
   foreach($atributes as $atrribute){
    //echo 'title '.$atribute->title;
   }
}

您是否在控制台中看到Json发送消息或错误?e、 这是JS问题还是PHP问题?PS您的JSON数据字符串缺少最后一个结尾]字符。。。这只是个打字错误吗?还是在代码中?我想这是一个php问题,因为ajax运行成功,显示Json已发送。这是将用户重定向到Step2.php页面的正确方法吗?@scunlife Typo,json字符串太大了,无法放在这里。我认为您对POST和AJAX的工作原理有一个非常根本的误解。