getJSON没有被正确调用

时间:2014-04-23 06:20:20

标签: javascript php getjson

我是初学者,所以请帮助我理解这一点。

我已经制作了这个示例测试代码: (出现在外部脚本文件中)

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。但它仍然没有用。

4 个答案:

答案 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);
?>