これは jQuery Mobile に関する質問ですが、純粋な jQuery にも関連しています。
フォーム アクション属性に設定されたページにページ遷移せずにフォーム データを投稿するにはどうすればよいですか。phonegap アプリケーションを作成していますが、サーバー側のページに直接アクセスしたくありません。
私はいくつかの例を試しましたが、フォームが目的のphpファイルに転送するたびに。
これは jQuery Mobile に関する質問ですが、純粋な jQuery にも関連しています。
フォーム アクション属性に設定されたページにページ遷移せずにフォーム データを投稿するにはどうすればよいですか。phonegap アプリケーションを作成していますが、サーバー側のページに直接アクセスしたくありません。
私はいくつかの例を試しましたが、フォームが目的のphpファイルに転送するたびに。
この例は、jQuery Mobile 1.2 を使用して作成されました。最近の例を見たい場合は、この記事またはより複雑な記事をご覧ください。非常に詳細に説明されている 2 つの実用的な例があります。さらに質問がある場合は、記事のコメント セクションで質問してください。
フォームの送信は、jQuery Mobile の恒常的な問題です。
これを実現する方法はいくつかあります。それらのいくつかをリストします。
これは、phonegap アプリケーションを使用していて、サーバー側の php に直接アクセスしたくない場合に最適なソリューションです。phonegap iOS アプリを作成する場合、これは正しい解決策です。
index.html
<!DOCTYPE html>
<html>
<head>
<title>jQM Complex Demo</title>
<meta name="viewport" content="width=device-width, height=device-height, initial-scale=1.0"/>
<link rel="stylesheet" href="http://code.jquery.com/mobile/1.2.0/jquery.mobile-1.2.0.min.css" />
<style>
#login-button {
margin-top: 30px;
}
</style>
<script src="http://www.dragan-gaic.info/js/jquery-1.8.2.min.js"></script>
<script src="http://code.jquery.com/mobile/1.2.0/jquery.mobile-1.2.0.min.js"></script>
<script src="js/index.js"></script>
</head>
<body>
<div data-role="page" id="login" data-theme="b">
<div data-role="header" data-theme="a">
<h3>Login Page</h3>
</div>
<div data-role="content">
<form id="check-user" class="ui-body ui-body-a ui-corner-all" data-ajax="false">
<fieldset>
<div data-role="fieldcontain">
<label for="username">Enter your username:</label>
<input type="text" value="" name="username" id="username"/>
</div>
<div data-role="fieldcontain">
<label for="password">Enter your password:</label>
<input type="password" value="" name="password" id="password"/>
</div>
<input type="button" data-theme="b" name="submit" id="submit" value="Submit">
</fieldset>
</form>
</div>
<div data-theme="a" data-role="footer" data-position="fixed">
</div>
</div>
<div data-role="page" id="second">
<div data-theme="a" data-role="header">
<h3></h3>
</div>
<div data-role="content">
</div>
<div data-theme="a" data-role="footer" data-position="fixed">
<h3>Page footer</h3>
</div>
</div>
</body>
</html>
check.php :
<?php
//$action = $_REQUEST['action']; // We dont need action for this tutorial, but in a complex code you need a way to determine ajax action nature
//$formData = json_decode($_REQUEST['formData']); // Decode JSON object into readable PHP object
//$username = $formData->{'username'}; // Get username from object
//$password = $formData->{'password'}; // Get password from object
// Lets say everything is in order
echo "Username = ";
?>
index.js :
$(document).on('pagebeforeshow', '#login', function(){
$(document).on('click', '#submit', function() { // catch the form's submit event
if($('#username').val().length > 0 && $('#password').val().length > 0){
// Send data to server through ajax call
// action is functionality we want to call and outputJSON is our data
$.ajax({url: 'check.php',
data: {action : 'login', formData : $('#check-user').serialize()}, // Convert a form to a JSON string representation
type: 'post',
async: true,
beforeSend: function() {
// This callback function will trigger before data is sent
$.mobile.showPageLoadingMsg(true); // This will show ajax spinner
},
complete: function() {
// This callback function will trigger on data sent/received complete
$.mobile.hidePageLoadingMsg(); // This will hide ajax spinner
},
success: function (result) {
resultObject.formSubmitionResult = result;
$.mobile.changePage("#second");
},
error: function (request,error) {
// This callback function will trigger on unsuccessful action
alert('Network error has occurred please try again!');
}
});
} else {
alert('Please fill all nececery fields');
}
return false; // cancel original event to prevent form submitting
});
});
$(document).on('pagebeforeshow', '#second', function(){
$('#second [data-role="content"]').append('This is a result of form submition: ' + resultObject.formSubmitionResult);
});
var resultObject = {
formSubmitionResult : null
}
index.html から別の .php ページを呼び出しているのと同じ問題に遭遇しました。.php ページは、データの保存と取得、および円グラフの描画を行っていました。しかし、円グラフ描画ロジックを追加すると、ページがまったく読み込まれないことがわかりました。原因は、index.html から .php ページを呼び出す行でした。
<form action="store.php" method="post">
これを次のように変更すると:
<form action="store.php" method="post" data-ajax="false">
、うまくいきます。