我的表单中有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错误控制台不显示任何错误! 感谢
答案 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()
。