我遇到了一个问题,我的代码无法理解。 在我的项目中,我有一个包含此函数的外部js文件:
function setFeedback(voto, id) {
var str = '{"voto":'+voto+',"idcorso":'+id+'}';
var obj = JSON.parse(str);
$.ajax({
url: 'feed.php',
method: 'POST',
data: obj,
contentType: "application/json; charset=utf-8",
dataType: 'json',
success: function() {
$( "#vota" ).hide( "slow", function() {
alert( "Grazie per aver votato il corso" + voto + id );
});
},
error: function(){
alert("Chiamata fallita, si prega di riprovare...");
}
});
}
应该通过邮寄'voto'和'id'发送。 我的feed.php文件非常简单:
<?php
session_start();
require_once('lib/DBhelper');
require_once('lib/Course.php');
if(isset($_POST['voto']) and isset($_POST['idcorso'])){
$voto = $_POST['voto'];
$course = new CourseManager($_POST['idcorso']);
$course->rateCourse($voto, $_SESSION['autenticato']);
}
和rateCourse是db中的简单插入方法,如:
插入反馈集id = $ id ......
所以我尝试了很多方法,但函数总是返回错误函数。只有当我不写'dataType:'json'时它才会成功返回,但db中没有写入任何内容。 我无法理解错误在哪里,如果json错了或其他什么......
感谢您的帮助,对不起我糟糕的英语:)
我试过
function setFeedback(voto, id) {
var obj = { 'voto': voto, 'idcorso': id };
$.ajax({
url: 'feed.php',
method: 'POST',
data: obj,
dataType: 'json',
success: function() {
$( "#vota" ).hide( "slow", function() {
alert( "Grazie per aver votato il corso" + voto + id );
});
},
error: function(){
alert("Chiamata fallita, si prega di riprovare...");
}
});
}
和php文件
<?php
session_start();
echo 'va male';
require_once('lib/DBhelper');
require_once('lib/Course.php');
$postdata = json_decode(file_get_contents("php://input"), true);
$id = $postdata['idcorso'];
$voto = $postdata['voto'];
$course = new CourseManager($id);
$course->rateCourse($voto, $_SESSION['autenticato']);
}
当我使用dataType ='json'时,我收到错误消息,所以我认为问题不在POSTed数据中而是在连接中。 如果我不写dataType,则会调用success函数,但不会在db中写入任何内容。
答案 0 :(得分:1)
由于您在请求中使用application/json
内容类型标头,因此PHP不会将POSTed数据填充到$_POST
中。这仅适用于基于表单的内容类型。您必须从PHP原始输入读取。
$json = file_get_contents('php://input');
$voto = json_decode($json);
这样做也没有意义:
var str = '{"voto":'+voto+',"idcorso":'+id+'}';
var obj = JSON.parse(str);
您可以直接创建JS对象来简化:
var obj = { 'voto': voto, 'idcorso': id };
每当你发现自己手动构建JSON字符串时,你应该问自己是否应该真的这样做。 JSON是一种序列化格式,在大多数情况下不应手动创建。