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フォームプラグインを使用しています。

私のフォームは次のようになります

<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

2 回目の編集

あなたのコードは、次のように書かれたはるかに直感的で読みやすいものになります。

$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 要求を作成しようとしています。その要求には、結果を警告するコールバックが含まれていますが、2 番目の呼び出して 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 に答える