jquery远程验证

时间:2010-02-09 00:53:20

标签: jquery validation internet-explorer

我的表单中有3个远程验证,其中3个在firefox控制台中没有错误。 第三个在IE中无法正常工作。 IE给我错误“对象不支持此属性”

这在IE check.php中出错:

< ?php

$sql="select * from people where email = '".$email."'";
$row=mysql_query($sql,$db_connection);
if (!$row)
{
    die('Error: ' . mysql_error());
}    

if (mysql_num_rows($row) > 0)
{
    $output = false;
} 
else 
{
    $output = true;
}
echo json_encode($output);

?>

这里是相应的jquery:

email: {// compound rule
                        required: true,
                        email: true ,
                        remote: "check.php"
                },  

任何想法为什么它在IE中抛出一个对象错误。 注意firefox错误控制台不显示任何错误! 感谢

1 个答案:

答案 0 :(得分:4)

我们必须看到该页面是确定的,但IE的“对象不支持此属性或方法”错误的一个常见原因是您在name页面上有一个元素或id属性包含与隐式全局变量相同的名称。

IE6-7有一个令人遗憾的非标准行为,即将对named / IDd元素的引用复制到window对象的属性中:

<div id="foo">bar</div>

alert(window.foo); // the div node

这意味着他们与变量共享命名空间:

<div id="foo">bar</div>

var foo= 3;
alert(window.foo); // now 3

但是,在另一个不幸的非标准行为中,如果你不告诉它你想要一个变量,IE会感到困惑。它尝试将任何新值分配给元素节点本身,这将失败:

<div id="foo">bar</div>

foo= 3; // implicit global variable in other browsers. Error in IE

当您忘记var并在函数中出现意外全局时,也会发生这种情况:

function bof() {
    foo= 3; // Error in IE
}

因此,您需要通过脚本查找已分配的变量,而不记得为其包含var语句。这不仅仅是一种良好的做法(并且ECMA262-5未来的'严格模式'JS要求) - 它可以阻止IE变得愚蠢并破坏您的页面。

顺便说一下:

$sql="select * from people where email = '".$email."'";

是一个危险的SQL注入安全漏洞。构造SQL查询时,必须对要插入字符串文字的任何文本使用mysql_real_escape_string()