1

我的代码有问题。我想通过在表单有效时创建一个包含变量的数组来验证我的表单。但要做到这一点,我需要使用 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 forms 插件来提交表单。

我的表格看起来像这样

<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 在有机会完全处理之前试图获取代码,我该如何防止这种情况发生?

4

2 回答 2

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);
于 2013-03-07T16:32:58.010 回答
0

经过几个小时的思考和 juco 的大量帮助,我意识到,我在这个函数中进行了 2 个单独的调用。首先我发布有效的数据,然后在一个成功的帖子上我试图进行单独的调用,一个 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

于 2013-03-07T19:01:15.470 回答