我正在尝试将JSON对象从Javascript / Jquery发送到PHP,并且在控制台中收到错误消息msg。我究竟做错了什么。我是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文件
<?php $obj = $_POST['data']; // print_r($obj); return $obj; ?>
菲尔(Phil)的出色回答,但自从OP标题说
从javascript( 不是jQuery )发送json对象到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); } }
请注意 ,我们还需要服务器的响应转换成JavaScript 对象 使用JSON.parse()
JSON.parse()
现在,在服务器端(基于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
json_encode
http://example.com
进入
http:\/\/example.com
…这不是OP中的情况,但在其他一些情况下很有用。