使用ajax将json对象传递给php
我已经建立了一个基本的api,我知道它的工作原理,因为postman附带的请求通常都会通过,我遇到的问题是通过AJAX将JSON对象传递到php文件 AJAX部分使用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
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],而您提供的解决方案不起作用,