我正在尝试使用PHP,JavaScript和MySQL编写一个简单的表决脚本。当将变量从href onclick参数中传递给javascript函数时,出现“未定义”错误,我相信是指该变量。
我的PHP看起来像这样:
echo "<td class=\"uparrow\"><a href=\"javascript:void(0);\" onclick=\"upVote.call(". $row['serial'] ."); return false;\">⇱</a></td>";
生成这样的HTML:
<td class="uparrow"><a href="javascript:void(0);" onclick="upVote.call(16); return false;">⇱</a>
函数看起来像这样:
function upVote(str) {
if (window.XMLHttpRequest)
{// code for IE7+, Firefox, Chrome, Opera, Safari
xmlhttp=new XMLHttpRequest();
}
else
{// code for IE6, IE5
xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
}
xmlhttp.onreadystatechange=function()
{
if (xmlhttp.readyState==4 && xmlhttp.status==200)
{
document.getElementById("report_status").innerHTML=xmlhttp.responseText;
}
}
xmlhttp.open("GET","up_vote.php?serial="+str,true);
xmlhttp.send();
}
当upVote(str)函数调用up_vote.php时,由于某种原因该变量未传递给PHP。
upVote PHP如下所示,当直接通过URL访问时,功能很好:
<?php
// Create Connection
$dbconnect=mysqli_connect("127.0.0.1","user","pass","table");
// Check connection
if (mysqli_connect_errno()) {
echo "Failed to connect to MySQL: " . mysqli_connect_error();
} else {
// echo "Connection Sucessful<BR><BR>";
}
// escape variables for security
if (isset($_GET['serial']))
{
$serial = mysqli_real_escape_string($dbconnect, $_GET['serial']);
}
// define SQL call and fetch the result
$sql = "SELECT vote FROM urls WHERE serial = $serial";
$result = mysqli_query($dbconnect,$sql);
if (!$result) {
die('Select Error: ' . mysqli_error($dbconnect));
}
//echo $sql . "<BR>"; // for error checking the SQL call
while($row = mysqli_fetch_array($result)) {
$return = $row['vote']+1;
}
echo $return; //Send result back to javascript
//Update the vote count in the database
$sql = "UPDATE urls SET vote=$return WHERE serial = $serial";
$result = mysqli_query($dbconnect,$sql);
if (!$result) {
die('Update Error: ' . mysqli_error($dbconnect));
}
mysqli_close($dbconnect);
?>
不要使用呼叫,也不要以预期的方式使用它。在这种情况下,我认为您不应该使用它。
调用方法不像来自某些使用它调用子例程之类的较旧语言的“调用”。您通常不使用“调用”来调用函数,只需使用括号即可。Ifabc
是一个函数abc()
调用该函数,abc(123)
并将123作为第一个参数传递。
call
javascript中的in用来调用一个函数(通常是不同的对象)作为“ thisArg”或this
。您可以认为它可以apply
对您的对象执行某些外部功能。实际上,有一个伴随方法apply
。
https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/Function/call
<td class="uparrow"><a href="javascript:void(0);" onclick="upVote(16); return false;">⇱</a>
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句