我的代码出了问题。我想通过在表单有效时创建一个包含变量的数组来验证我的表单。但要做到这一点,我需要使用isset方法来知道信息已经发布。这是一个简单的例子
http://richbaird.net/clregister
<?PHP
if(isset($_POST['username'])) {
$helloworld = array ("hello"=>"world","name"=>"bob");
print json_encode($helloworld);
};
if(!isset($_POST['username'])) {
echo json_encode(array('error' => true, 'message' => 'No username specified'));
?>
如果已发布用户名,则足够简单创建数组helloworld。
我正在使用以下方法来获取json
<script>
//document ready
$(document).ready(function(){
var php = "helloworld.php";
//submit form
$("#loginform").ajaxForm
(
//on successful submission
function() {
//getjson
$.getJSON("helloworld.php",function(data) {
alert(data.message)
}) //close get json
.error(function(error) { alert(error.responsetext); })
.complete(function() { alert("complete"); });
} // close success
) // close submit
});
//end document ready
</script>
我正在使用jquery表单插件来提交表单。
我的表单看起来像这样
<form id="loginform" name="loginform" method="post" action="helloworld.php">
<label for="username">username</label>
<input type="text" name="username" id="username" />
<br />
<label for="password">password</label>
<input name="password" type="password" />
<br />
<input name="submit" type="submit" value="Login" id="subtn" />
</form>
网络控制台显示POST返回{hello:world name:bob}的方法,但GET返回指定的无用户名,这是我在警报中得到的。看起来jquery在它有机会完全处理之前试图获取代码,我该如何防止它?
答案 0 :(得分:1)
你错过了引号。应该是:
if(isset($_POST['username']))
您应该检查您的控制台,看看username
是否实际上已发布,就好像它不是,您没有返回任何数据。您可以考虑返回错误if(!isset($_POST['username']))
,可能类似于:
echo json_encode(array('error' => true, 'message' => 'No username specified'));
修改
另外,请记住它是$_POST
,而不是$_post
第二次修改
您的代码将更加直观,可读性如此:
$return = array();
if(isset($_POST['username'])) {
$return = array("hello"=>"world","name"=>"bob");
} else {
$return = array('error' => true, 'message' => 'No username specified');
}
echo json_encode($return);
答案 1 :(得分:0)
经过几个小时的思考和juco的大量帮助后,我意识到,我正在这个函数中进行两次单独的调用。首先我发布有效的数据,然后在一个成功的帖子上我试图进行单独的调用,一个GET请求,该请求包含应该提醒我结果的回调,但是因为它使第二个调用它发送一个GET请求,变量POST永远不会被设置,因此没有什么可以回来的。我将我的代码修改为仅使用post方法。
<script>
//document ready
$(document).ready(function(){
// bind form using ajaxForm
$('#loginform').ajaxForm({
// dataType identifies the expected content type of the server response
dataType: 'json',
// success identifies the function to invoke when the server response
// has been received
success: processJson
}
);
function processJson(data) {
alert(data.hello);
}
});
//end document ready