2014-09-10 18 views
0

我有一個問題,我不明白我的代碼。 在我的項目我已經包含下面這個功能的外部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..."); 
} 
}); 

} 

應該通過郵局「博託」和「身份證」發送。 我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' 我得到的ER ror的消息,所以我不認爲這個問題是在POST數據,但在連接。 如果我不寫數據類型成功函數被調用,但沒有寫入數據庫。

+0

實際的錯誤是什麼? AJAX請求是否完成,如果有的話,服務器的響應是什麼? – David 2014-09-10 19:50:24

回答

1

由於您在請求中使用application/json內容類型標頭,因此PHP不會將張貼的數據填充到$_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是序列化格式,不應在大多數情況下手動創建。