我已经设置了一个基本的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));
谢谢你的时间!
答案 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)))