首先,我不是程序员而且相对缺乏经验...我正在尝试在我的网站上使用星级评分系统,我从this链接下载了脚本。当我在浏览器中预览它时,我正确地将它们显示在我的网站上但是当您点击星形来评价它时,它不会在我的数据库中记录该评级。使用firebug我想我已经将它跟踪到通过ajax请求传输数据的javascript函数。当我点击星号时,我在firebug中得到的响应是“你不应该试图以这种方式访问这个文件。”如果我注释掉if / die语句,我在firebug中得到的响应是未定义的索引,它列出了'item','rating','classes'。我下载的脚本的原始ajax请求代码位于底部代码示例中。到处都是我读过如何使用xmlhttprequest提到的ajax请求,所以我希望通过切换到可以消除这个问题的那个,它没有。我现在没有任何语法错误,所以我认为我的xml请求格式正确。你们都觉得怎么样?提前谢谢。
function RateItem(varItemId, varRate)
{
var varOrigClassName = document.getElementById(varItemId).className;
var request;
if (window.XMLHttpRequest)
{// code for IE7+, Firefox, Chrome, Opera, Safari
request=new XMLHttpRequest();
}
else
{// code for IE6, IE5
request=new ActiveXObject("Microsoft.XMLHTTP");
}
request.open("POST","ajax.rate.item.php",true);
//request.onload= ReloadRating;
request.setRequestHeader('item','varItemId');
request.setRequestHeader('rating','varRate');
request.setRequestHeader('classes','varOrigClassName');
request.send('item','rating','classes');
}
ajax.rate.item.php文件
<?php
require_once("classes/include.all.php");
// Check that the data was sent
if (sizeof($_POST) == 0
|| $_POST['item'] == null
|| strlen(trim($_POST['item'])) == 0
|| $_POST['rating'] == null
|| strlen(trim($_POST['rating'])) == 0
|| is_numeric($_POST['rating'])
|| $_POST['classes'] == null
|| strlen(trim($_POST['classes'])) == 0)
{
die("You shouldn't be attempting to access this file in this manner.");
}
echo Rating::RateItem($_POST['item'],$_POST['rating'],$_POST['classes']);
?>
原始的ajax请求
function RateItem(varItemId, varRating)
{
var varOrigClassName = document.getElementById(varItemId).className;
// Retrieve Ajax Feeds
new Ajax.Request('ajax.rate.item.php',
{
method: 'post',
parameters: {item: varItemId, rating: varRating, classes: varOrigClassName},
onSuccess: ReloadRating,
onFailure: RatingError
}
);
}
答案 0 :(得分:0)
要使用POST方法发送params,您可以尝试这种方式:
xmlhttp.open("POST","ajax.rate.item.php",true);
xmlhttp.setRequestHeader("Content-type","application/x-www-form-urlencoded");
xmlhttp.send("item=" + varItemI + "&rating=" + varRate + "&classes=" + varOrigClassName);