我试图将
JSON对象从
Javascript / Jquery发送到PHP,我在控制台中收到错误信息.我究竟做错了什么.我是JS和PHP的新手.
JQuery文件:
$(document).ready(function() { var flickr = {'action': 'Flickr','get':'getPublicPhotos'}; // console.log(typeof(flickr)); var makeFlickrCall = function(flickrObj){ $.ajax({ url: '../PHPincl/apiConnect.PHP',type: 'POST',data: flickrObj }) .done(function(data) { console.log("success"); console.log(JSON.stringify(data)); }) .fail(function() { console.log("error"); }) .always(function() { console.log("complete"); }); }; makeFlickrCall(flickr); });
<?PHP $obj = $_POST['data']; // print_r($obj); return $obj; ?>
解决方法
由于OP标题的说法,Phil的优秀答案
send json object from javascript (not jQuery ) to PHP
这是如何使用(香草)javascript,以防它有助于寻找这种方法的人:
var jsondata; var flickr = {'action': 'Flickr','get':'getPublicPhotos'}; var data = JSON.stringify(flickr); var xhr = new XMLHttpRequest(); xhr.open("POST","../PHPincl/apiConnect.PHP",!0); xhr.setRequestHeader("Content-Type","application/json;charset=UTF-8"); xhr.send(data); xhr.onreadystatechange = function () { if (xhr.readyState === 4 && xhr.status === 200) { // in case we reply back from server jsondata = JSON.parse(xhr.responseText); console.log(jsondata); } }
请注意,我们仍然需要使用JSON.parse()将服务器的响应转换为javascript对象
现在,在服务器端(基于Phil的回答)如果您要向客户端发送回复,您可以:
header('Content-type: application/json'); $json = file_get_contents('PHP://input'); $json_decode = json_decode($json,true); $json_encode = json_encode($json_decode); echo $json_encode;
注意:
首先解码然后编码回原始json输入的原因是正确地逃避数据中(可能的)URL中的斜杠,例如,
json_encode将转换此URL
http://example.com
成
http:\/\/example.com
……在OP中不是这种情况,但在其他一些场景中很有用.