在ajax中返回值时出现致命错误

时间:2011-11-03 19:47:54

标签: php jquery

我在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

1 个答案:

答案 0 :(得分:2)

在第31行,您有:

if ($strlen($isbn) = 10)

删除strlen函数上的$,并将=(赋值运算符)更改为==(等价运算符)。它现在应该是这样的:

if (strlen($isbn) == 10)

之后你也需要做几行。

编辑:还有一件事。从底部大约五行,你错过了一个等号。

$result false;

应该是:

$result = false;