我是初学者,所以请帮助我理解这一点。
我已经制作了这个示例测试代码: (出现在外部脚本文件中)
function validateForm()
{
$.getJSON('database/grab_db.php', function(data) {
alert("hello");
return false;
});
}
从表单中调用:
<form id="form" action="users.php" method="post" onsubmit="return validateForm()">
另外,我在php文件中将内容类型更改为JSON
,该文件返回数据库
header("Content-Type: application/json");
我知道问题在于validateForm()
方法&amp; getJSON
未被正确调用。将alert()
置于validateForm()
之内,getJSON
之外。它运作良好。
此外,它不是同源策略的情况,因为所有文件都是本地的。
提前致谢。
最初return false;
声明超出了getJSON
。但它仍然没有用。
答案 0 :(得分:1)
根据您在评论Uncaught ReferenceError: $ is not defined user_script.js:1 (anonymous function)
中提供的控制台错误,您似乎没有将jQuery库包含在包含此外部脚本文件的同一文件中。
请包含jQuery,它应该可以工作。
答案 1 :(得分:0)
validateForm
没有return
语句(您传递给getJSON
的函数中的语句是一个不同的函数。)
这意味着该函数返回undefined
。
这意味着您的事件处理函数也会返回undefined
。
这并不会停止提交事件的默认操作,因此表单仍然会被提交。
由于Ajax是异步的,这意味着表单在HTTP响应返回并且回调函数已经运行之前提交。
答案 2 :(得分:0)
return false;
回调中的 $.getJSON
不会为validateForm
返回false。
您可以将表单元素传递给validateForm
函数,如下所示:
HTML:
<form id="form" action="users.php" method="post" onsubmit="return validateForm(this);">
JS:
function validateForm(form)
{
$.getJSON('database/grab_db.php', function(data) {
// do some checking
// if valid submit the form
form.submit();
});
// return false stop submitting the form
return false;
}
答案 3 :(得分:0)
你应该使用$ .ajax();在jquery
<form id="form" action="users.php" method="post" onsubmit="return validateForm()">
脚本:
function validateForm()
{
$.ajax({
type:"post",
url: "<?php echo database/grab_db.php ?>",
cache: false,
data: $("form").serialize(),
success: function(data) // return data
{
alert(data);
}
});
return false;
}
在grab_db.php文件中
<?php
$data = //fetch data
echo json_encode($data);
?>