【问题标题】:ajax method's post not workingajax方法帖子不起作用
【发布时间】:2014-09-10 19:48:22
【问题描述】:

我的代码有一个我无法理解的问题。 在我的项目中,我有一个包含以下函数的外部 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 是一个简单的数据库插入方法,例如:

插入反馈集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' 时,我收到了错误消息,所以我认为问题不在 POST 数据中,而是在连接中。 如果我不写 dataType 调用成功函数,但没有写在 db 中。

【问题讨论】:

  • 实际错误是什么?是否发出了 AJAX 请求,如果有,服务器的响应是什么?

标签: php jquery mysql ajax json


【解决方案1】:

因为您在请求中使用了application/json 内容类型标头,所以PHP 不会将POST 数据填充到$_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 是一种序列化格式,在大多数情况下不应手动创建。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-06-02
    • 1970-01-01
    • 2015-01-09
    • 2018-04-25
    相关资源
    最近更新 更多