2014-10-30 124 views
1

我有一个页面,用户在那里做一些事情,然后选择下一个,我想将它们重定向到一个名为“Step2.php”的php文件以及一些JSON信息。发送json从javascript到php

我建我的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 POST这样的:

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); 
     } 
    }); 

问:为什么我不能老是得到了什么在我的Step2.php文件中?我错误地将用户重定向到该页面吗?在Step2.php文件

代码如下所示:

if(isset($_POST["jsonData"])) { 
    $json = $_POST["jsonData"]; 
    var_dump(json_decode($json, true)); 
} else { 
    echo "NO"; 
} 

它总是显示NO。

+0

你看到的Json发送味精或在您的控制台错误? (例如,这是JS问题还是PHP问题?) – scunliffe 2014-10-30 22:58:48

+1

PS你的JSON数据字符串缺少最后一个关闭']'字符......这只是一个错字吗?或者在代码中呢? – scunliffe 2014-10-30 23:03:55

+0

我想这是一个PHP的问题,因为阿贾克斯运行成功,显示“JSON发送”。 这是将用户重定向到Step2.php页面的正确方法吗? – user2997779 2014-10-30 23:04:20

回答

1

好的,我想你误解了AJAX的工作原理。你ajax请求发送json到你的php,然后应该以适当的回报作出响应,在你的情况下var_dump

这不会在php中保存json,如果你去请求没有POST请求的php文件,你将不会得到任何东西,只是输出“NO”,因为你没有POST数据发送。

如果你确实想发送一个json给你php,你现在正在做你正在做的事,并听取你在检查员看到的请求响应。我不清楚你最终想要对数据做什么,所以我不知道这是否正确。

1

你不能这样做。这不是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_start()。

-2

试试这个代码在我的工作:

<?php 
if(isset($_POST["jsonData"])) { 
    $json = $_POST["jsonData"]; 
    $json = str_replace('\\', '', $json); 
    var_dump(json_decode($json, true)); 
    print_r($json); 
} else { 
    echo "NO"; 
} 
?> 
0

您可以发表JSONPHP

jsonData = JSON.stringify(serializableAttributes); 
console.log(jsonData); 
$.post("Step2.php", { json: jsonData }, function(msg) { 
    console.log("image name = " + msg); 
}); 

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; 
    } 
}