这是我第一次尝试使用AJAX将数据发送到php,我认为我做错了,因为我无法在mysql中看到任何新数据,这是我尝试过的。
此脚本通过单击img:
调用ajax$s .= "\n\t<td>";
$canEdit = getPermission('tasks', 'edit', $a['task_id']);
$canViewLog = getPermission('task_log', 'view', $a['task_id']);
if ($canEdit) {
$s .= ("\n\t\t".'<a href="#">'
. "\n\t\t\t".'<img src="./images/icons/tick.png" alt="' . $AppUI->_('Check')
. '" border="0" width="12" height="12" onclick="javascript:insertData()" />' . "\n\t\t</a>");
}
$s .= "\n\t</td>";
$currentTasken=$a['task_id'];
$currentUser=$AppUI->user_id;
这是我的ajax函数,它将数据发送到php文件:
?>
<script type="text/javascript">
function insertData()
{
if (window.XMLHttpRequest)
{// code for IE7+, Firefox, Chrome, Opera, Safari
xmlhttp=new XMLHttpRequest();
}
else
{// code for IE6, IE5
xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
}
xmlhttp.open("POST","datafile.php",true);
xmlhttp.send("<?php echo $currentUser; ?>");
xmlhttp.send("<?php echo $currentTasken; ?>")
}
</script>
这是从AJAX接收数据的PHP文件:
<?php
$currentUser = $_POST['$currentUser'];
$currentTasken = $_POST['$currentTasken'];
$con = mysql_connect("localhost", "root", "") or die(mysql_error());
if(!$con)
die('Could not connectzzz: ' . mysql_error());
mysql_select_db("foxi" , $con) or die ("could not load the database" . mysql_error());
$check = mysql_query("SELECT * FROM dotp_task_log");
$numrows = mysql_num_rows($check);
if($numrows == 0)
{
$pass = md5($pass);
$ins = mysql_query("INSERT INTO dotp_task_log (`task_log_creator`,`task_log_Task`) VALUES ('$currentUser' , '$currentTasken')" ) ;
if($ins)
die("Succesfully Created Log!");
else
die("ERROR");
}
else
{
die("Log already exists!");
}
?>
答案 0 :(得分:1)
更改如下:
<?php
$currentUser = $_POST['currentUser'];
$currentTasken = $_POST['currentTasken'];
$con = mysql_connect("localhost", "root", "") or die(mysql_error());
if(!$con)
die('Could not connectzzz: ' . mysql_error());
mysql_select_db("foxi" , $con) or die ("could not load the database" . mysql_error());
$check = mysql_query("SELECT * FROM dotp_task_log");
$numrows = mysql_num_rows($check);
if($numrows == 0)
{
$pass = md5($pass);
$ins = mysql_query("INSERT INTO dotp_task_log (`task_log_creator`,`task_log_Task`) VALUES ('$currentUser' , '$currentTasken')" ) ;
if($ins)
die("Succesfully Created Log!");
else
die("ERROR");
}
else
{
die("Log already exists!");
}
?>
您的脚本也是:
<script type="text/javascript">
function insertData()
{
if (window.XMLHttpRequest)
{// code for IE7+, Firefox, Chrome, Opera, Safari
xmlhttp=new XMLHttpRequest();
}
else
{// code for IE6, IE5
xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
}
xmlhttp.open("POST","datafile.php",true);
xmlhttp.setRequestHeader("Content-type","application/x-www-form-urlencoded");
xmlhttp.send("currentUser=<?php echo $currentUser; ?>¤tTasken=<?php echo $currentTasken; ?>");
}
</script>
答案 1 :(得分:1)
使用ajax需要不同的思考方式。我会给你一些概念(如果你还没有),这将有助于你不仅解决这个问题,还可以解决未来的问题并节省时间:
编写服务器端和客户端逻辑后,必须单独测试。所以,首先测试服务器端(php部分):如何?制作一个简单的sily静态表单,仅用于将数据发布到服务器端逻辑,以测试它是否在数据库中正确保存数据并撤回已用数据。
在测试服务器端之后,您确定如果您的应用程序不能正常工作,那么问题肯定在客户端。所以,我们需要测试它。你是否已经知道如何使用Browser的控制台?在Firefox中MacOS是[命令] + [选项] + [k]在Windows应该是[ctrl] + [shift] + [k]它将在浏览器底部打开,你应该标记[网络]以保持记录网络请求,如果您的客户端正在运行,您可以看到您通过ajax 请求的页面及其http状态代码(应为200)。
如果客户端能够通过ajax调用服务器端并且您确定它正在执行,因为您在浏览器的控制台上看到了post请求但仍然没有在数据库上正确保存数据,那么您可能遇到问题数据正在发送,或者它不是由ajax发送的。您也可以在浏览器的日志中进行测试,点击日志中显示的页面右键并标记该选项,也许用英文写成:“存储请求/响应内容”(我的浏览器是葡萄牙语。 标记此选项后,再次发出请求并使用左键单击所请求的页面。您将看到通过ajax发送到服务器端的所有标头和数据。所以,检查一下是否没有错误
这就是全部。但是,考虑使用jQuery,它并不难理解,而且它的ajax工作方式更加简单。看看这个样本:
var request = $.ajax({
url: "script.php",
method: "POST",
data:$('#form-id').serialize(), // gets all form fields serialized creating a string fieldName1=value1&fieldName2=value2...
dataType: "html"
}).done(function( msg ) { // after it's done
$( "#log" ).html( msg );
alert(msg)
}).fail(function( jqXHR, textStatus ) {
alert( "Request failed: " + textStatus );
});
顺便说一下,如果你必须在html的任何部分回应一些php值,包括javascript部分,就像你在:
xmlhttp.send("$currentUser");
xmlhttp.send("$currentTasken");
要获取变量值,您应将其回显为:
xmlhttp.send("<?=$currentUser?>");
xmlhttp.send("<?=$currentTasken?>");
祝你好运!