使用ajax将json对象传递给php

使用ajax将json对象传递给php,php,json,ajax,Php,Json,Ajax,我已经建立了一个基本的api,我知道它的工作原理,因为postman附带的请求通常都会通过,我遇到的问题是通过AJAX将JSON对象传递到php文件 AJAX部分 function add_book(){ if(validate()){ var jsonData = {}; jsonData.Price = document.getElementsByName("Price")[0].value; jsonData.Title = docu

我已经建立了一个基本的api,我知道它的工作原理,因为postman附带的请求通常都会通过,我遇到的问题是通过AJAX将JSON对象传递到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”,“Author”:“dasda”,“Genre”:“scientific”}
我基本上可以将这个字符串复制/粘贴到postman,它可以按预期工作。
现在转到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,而它不应该返回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))修复了它;

谢谢你的时间

这有帮助吗

$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'])){
这就是问题所在 $json str=文件获取内容('php://input');

post参数应由
$\u post
访问

试试这个

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

还要为
$json\u str

做一个
var\u dump
,我认为问题在于文件的内容()。也许你试着回应一下。 如果你能写下:

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

我用$json_str交换了$json_obj,这也不起作用,但邮递员请求不再通过trueTrying,邮递员给我这个错误,无法在…中使用stdClass类型的对象作为数组。。。。尝试使用ajax仍然会给出一个很好的答案,而不是问一个问题。一个好的答案总是会有一个解释,说明做了什么以及为什么这样做,不仅是为了OP,而且是为了未来的访客。@JayBlanchard在以后回答时会记住这一点。谢谢这里没有足够的代码来帮助您,尤其是PHP。你能得到文件内容吗?如果你做
var\u dump($json\u obj),会打印什么
if
语句之前?但是使用浏览器,而不是邮递员。谢谢你的回答,我设法找到了问题的根源。我做了一个函数来检查json是否有效,结果是无效的,php部分没有问题,结果是,你应该删除这个问题,因为原来的问题与错误无关,但您从不发送数据。'jsonData'仍然是javascriptUndefined索引jsonData的对象感谢您的回复。Php响应[object object],而您提供的解决方案不起作用,