isset导致getjson返回undefined

时间:2013-03-07 16:24:32

标签: php jquery json forms validation

我的代码出了问题。我想通过在表单有效时创建一个包含变量的数组来验证我的表单。但要做到这一点,我需要使用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在它有机会完全处理之前试图获取代码,我该如何防止它?

2 个答案:

答案 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