Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/471.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
将json对象从javascript发送到php_Javascript_Php_Jquery_Ajax_Json - Fatal编程技术网

将json对象从javascript发送到php

将json对象从javascript发送到php,javascript,php,jquery,ajax,json,Javascript,Php,Jquery,Ajax,Json,我试图将JSON对象从Javascript/Jquery发送到PHP,并且在控制台中得到错误消息。我做错了什么。我不熟悉JS和PHP JQuery文件: $(document).ready(function() { var flickr = {'action': 'Flickr', 'get':'getPublicPhotos'}; // console.log(typeof(flickr)); var makeFlickrCall = function(flickrOb

我试图将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文件


标准jQuery
.ajax()
方法使用
数据
属性创建一个x-www-form-urlencoded字符串以传递到请求正文中。像这样的

action=Flickr&get=getPublicPhotos
因此,PHP脚本不应查找
$\u POST['data']
,而应查找
$\u POST['action']
$\u POST['get']

如果要将原始JSON数据有效负载发送到PHP,请执行以下操作

将AJAX
contentType
参数设置为
application/json
,并发送json对象的字符串化版本作为
数据
负载,例如

$.ajax({
    url: '../phpincl/apiConnect.php',
    type: 'POST',
    contentType: 'application/json',
    data: JSON.stringify(flickrObj),
    dataType: 'json'
})
然后,PHP脚本将从
php://input
流,例如

$json = file_get_contents('php://input');
然后可以将其解析为PHP对象或数组

$dataObject = json_decode($json);
$dataArray = json_decode($json, true);
如果你只是想回显给客户

header('Content-type: application/json');

// unmodified
echo $json;

// or if you've made changes to say $dataArray
echo json_encode($dataArray);
使用:

而不是

makeFlickrCall(flickr);
服务器端脚本应接收JSON,如下所示:

data="{"action":"Flickr","get":"getPublicPhotos"}"

Phil的回答很好,但是因为OP标题说

将json对象从javascript(非jQuery)发送到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()

现在,在服务器端(根据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\u encode
将转换此URL

http://example.com
进入


。。。OP中的情况并非如此,但在其他一些场景中很有用。

console.log错误.fail and.always msg显示在我的控制台窗口上。请尝试
print\r($\u POST)
查看结果。这表明您希望将变量
flickrObj
作为数据发送,您需要将其设置为全局变量,这是什么?这是我的变量flickr={'action':'flickr','get':'getPublicPhotos'};必须使用
$\u POST['action']
获取action的值,使用
$\u POST['get']
获取get的值。如果您只想返回
echo json\u encode($\u POST)
。我需要做什么才能使post工作$\u post['data']并将对象返回到javascript?@Phil非常有用的回答,我可以让php返回执行进度几倍于当前发生的事情吗?因为我的php执行太长了。感谢JFK的回复,我的标题是Javascript,但我在描述中指定了Javascript/Jquery。@Vish:没问题,我只是提供了一种使用Javascript的方法,以防有人不想包含jQueryApprove,我很高兴知道解决这个问题的两种方法:)
http://example.com
http:\/\/example.com