2013-11-10 186 views
0

另一个JSON相关的问题,不幸的是...发送JSON数据到服务器jquery.ajax

考虑以下JSON

[{"details":{ 
"forename":"Barack", 
"surname":"Obama", 
"company":"government", 
"email":"[email protected]", 
"files": [{ 
     "title":"file1","url":"somefile.pdf" 
     }, 
     { 
     "title":"file2", 
     "url":"somefile.pdf" 
     }] 
} 
}] 

我需要将此数据发送到PHP脚本我的服务器上,然后互动与它在服务器上,但不知道如何。

我发送它通过jquery.ajax和它被罚款(没有错误信息),并继承人的代码。 (newJson是我创建如上正是我的JSON对象)

$.ajax({ 
type: "POST", 
url: "test.php", 
dataType: 'json', 
data: newJson, 
success: function(msg) 
    { 
    alert(msg); 
    }, 
error: function(jqXHR, textStatus) 
    { 
    alert(textStatus); 
    } 
}); 

所以在我的PHP脚本,到目前为止,我只是想回显内容,显示在成功警报字符串

<?php 
header('Access-Control-Allow-Origin: *'); 
echo $_POST; 
?> 

但这只是给我一个解析错误..所以任何想法你美好的人?

+0

什么是分析错误? – phatskat

+0

多数民众赞成说,整个邮件只是解析错误 - 多数民众赞成在消息出现在警报 –

+0

只是“解​​析错误?”尝试将'error_reporting(E_ALL);'添加到PHP脚本的顶部,看看它是否能告诉你更多。 – phatskat

回答

2

你必须有一个键/值对与$_POST[key]收到在PHP中的数据。发送你全部由自己的阵列是不是最好的方法,因为你已经有了结构反对

我会解开外阵列,因为你只发送一个物体里面

那么物体看起来像

{"details":{ 
"forename":"Barack", 
"surname":"Obama", 
"company":"government", 
"email":"[email protected]", 
"files": [{ 
     "title":"file1","url":"somefile.pdf" 
     }, 
     { 
     "title":"file2", 
     "url":"somefile.pdf" 
     }] 
} 
} 

在php将收到与$_POST['details']。不要转换为JSON,只需将整个对象传递给$.ajax data属性即可。

如果从阿贾克斯得到parserror,是在接收端和听起来像或者正从PHP 500 eror或不发回JSON你dataType

+0

到目前为止很好,那么我将如何访问每个元素,例如我将如何创建一个包含forename的变量?编辑:在PHP我应该加 –

+1

'$ forenanme = $ _POST ['details'] ['forename'];'。在'$ details'这样的变量中存储'$ _POST ['details']',以使'$ details ['forename'];' – charlietfl

+0

可以循环遍历'details ['files']'作为普通的php数组 – charlietfl

0

因为您没有通过JSON作为一个领域,你可以这样做:

<?php 
    $post = file_get_contents("php://input"); 
    $json = json_decode($post); 
    var_dump($json); // Should be a nice object for you. 
1

首先如预期,原来的JSON字符串格式错误的。尝试

{ 
    "details":{ 
    "forename":"Barack", 
    "surname":"Obama", 
    "company":"government", 
    "email":"[email protected]", 
    "files": [ 
     { "title":"file1","url":"somefile.pdf" }, 
     { "title":"file2","url":"somefile.pdf"} 
    ] 
    } 
} 

其次,发送到PHP的数据已经被解析到一个数组中,但不是在JSON中。要回显,您必须使用json_encode将数组转换回JSON字符串

echo json_encode($_POST); 
exit; 
+0

也是一个很好的答案,但我选择charlietfl的答案,因为他/她帮助我处理数据。 –