ajax方法发布不起作用

时间:2014-09-10 19:48:22

标签: php jquery mysql ajax json

我遇到了一个问题,我的代码无法理解。 在我的项目中,我有一个包含此函数的外部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中写入任何内容。

1 个答案:

答案 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是一种序列化格式,在大多数情况下不应手动创建。