将带有ajax的json对象传递给php

时间:2017-05-26 17:04:51

标签: php json ajax

我已经设置了一个基本的api,我知道它的工作原理是因为postman附带的请求正常传递,我遇到的麻烦是将JSON对象通过AJAX传递给php文件。

AJAX部分

function add_book(){
    if(validate()){
        var jsonData = {};
        jsonData.Price = document.getElementsByName("Price")[0].value;
        jsonData.Title = document.getElementsByName("Title")[0].value;
        jsonData.Author = document.getElementsByName("Author")[0].value;
        jsonData.Genre = document.getElementsByName("select_dropdown")[0].value;
        alert(JSON.stringify(jsonData));
            var request = new XMLHttpRequest();
            var url = "/books.php";
            request.open("POST", url, true);
            request.setRequestHeader("Content-Type", "application/json;charset=UTF-8");
            request.onreadystatechange = function() {
                if (request.readyState == 4 && request.status == 200) {
                }
            }
            request.send(jsonData);
        }
}

例如,这是我从字符串化对象获得的警报
{“Price”:“23”,“Title”:“asdas”,“作者”:“dasda”,“类型”:“科幻小​​说”}我基本上可以将此字符串复制/粘贴给邮递员按预期工作。
现在到php部分

$json_str = file_get_contents('php://input');
$json_obj = json_decode($json_str);
if(!empty($json_obj->Price) && !empty($json_obj->Genre) && !empty($json_obj->Author) && !empty($json_obj->Title)){

if总是返回false,而不应该,postman的请求传递为true。

=============================================== ========================= 编辑:
我设法找到了问题的根源。我做了一个函数来检查json是否有效,结果证明它不是,因为事实证明在php部分没有问题。以下是有人需要它/奇观的功能:

function isValidJSON($str) {
   json_decode($str);
   return json_last_error() == JSON_ERROR_NONE;
}

=============================================== ==========================编辑2:
问题出在request.send(jsonData);部分。用request.send(JSON.stringify(jsonData));

修正了它

谢谢你的时间!

3 个答案:

答案 0 :(得分:1)

这就是问题所在     $ json str = file_get_contents(' php:// input');

$_POST应该访问帖子参数。

相反尝试这个

$json_str = $_REQUEST['jsonData']`;

并为var_dump

执行$json_str

答案 1 :(得分:0)

这有帮助吗?

$json_str = file_get_contents('php://input');
    $json_obj = json_decode($json_str);
    if(!empty($json_obj['Price']) && !empty($json_obj['Genre']) && !empty($json_obj['Author']) && !empty($json_obj['Title'])){

答案 2 :(得分:0)

我认为问题是file_get_contents()。也许你试着回应它。 如果你能写的话:

if (!(empty($json_obj->Price) && empty($json_obj->Genre) && empty($json_obj->Author) && empty($json_obj->Title)))