我在jquery中进行ajax调用
$.get("validate_isbn.php", {isbn: obj[16]},
function(answer)
{
console.log(answer);
if (answer == "valid")
{
var checked1 = $(elements[index]).val();
//$(elements[index]).val().append("<img src = 'pics/green_checkmark.png'>"); //doesn't work
//elements.after("<img src = 'pics/green_checkmark.png'>"); //sets all the elements with this pic
elements.eq(index).after("<img src='pics/green_checkmark.png' id='checkmark'>");
var checked = $(elements[index]).val();
}
});
工作得很好。我在调试器中看到它正在使用obj数组中的isbn数字正确地发送变量isbn。我的问题是在PHP方面。当我测试时,我只是让代码回显“有效”,一切都很好。但现在当我把真正的代码放在它停止工作时:
<?php
//This algorithm is for ISBN 10
function is_isbn_10_valid($n){
$check = 0;
for ($i = 0; $i < 9; $i++)
{
$check += (10 - $i) * substr($n, $i, 1); //starting at the leftmost digit, multiple each digit by a constant, starting at 10, add the total
}
$t = substr($n, 9, 1); // tenth digit (aka checksum or check digit)
$check += ($t == 'x' || $t == 'X') ? 10 : $t; //now add the tenth digit
return $check % 11 == 0;
}
//The algorithm for ISBN 13 validation is as follows:
//Multiply each digit of teh isbn, starting at the left, with 1,3,3... etc for the entire isbn (including the check digit becuase its
//just going to be multiplied by 1 anyways.
//Add them all together, do mod 10 and voila!
function is_isbn_13_valid($n){
$check = 0;
for ($i = 0; $i < 13; $i+=2) //this does digits 1,3,5,7,9,10,11,13
{
$check += substr($n, $i, 1);
}
for ($i = 1; $i < 12; $i+=2) //this does digits 2,4,6,8,10,12
{
$check += 3 * substr($n, $i, 1);
}
return $check % 10 == 0;
}
$isbn = $_GET["isbn"];
if (strlen($isbn) = 10)
{
$result = is_isbn_10_valid($isbn);
}
else if (strlen($isbn) = 13)
{
$result = is_isbn_13_valid($isbn);
}
else
{
$result false;
}
if ($result === true)
{echo "valid";}
else if ($result === false)
{echo "not valid";}
?>
(注意:我确信我可以更有效率并且只返回布尔值,但是我此刻没有这样做,因为我不确定jquery .get会如何接受它,作为布尔值或文本...)
无论如何,它不起作用。 console.log上的错误让我:
致命错误:无法在 ... pathname here ... \ validate_isbn.php 的写入上下文中使用函数返回值 31
答案 0 :(得分:2)
在第31行,您有:
if ($strlen($isbn) = 10)
删除strlen函数上的$,并将=(赋值运算符)更改为==(等价运算符)。它现在应该是这样的:
if (strlen($isbn) == 10)
之后你也需要做几行。
编辑:还有一件事。从底部大约五行,你错过了一个等号。
$result false;
应该是:
$result = false;