ASPX が彼らのフォーム システムでどのように動作するかに似たものをエミュレートできないかと考えていました。ボタンをクリックすると、同じページが呼び出されますが、ページ全体をリロードするのではなく、ページ内の特定の関数が呼び出されます。たとえば、フォーム要素が入力されていることを確認する関数を内部で呼び出すことができます。これはPHPで可能ですか?この例を提供する方法がわかりません。漠然としていて申し訳ありません...
6 に答える
ここでの方法は Ajax です。PHPはサーバー側であるため、定義上、必要なものを取得するにはサーバーにアクセスする必要があります。
あなたが本当に Ajax 嫌いなら、XAJAXを使用すると、大量の Ajax のような JavaScript コードを使用せずに PHP 関数を直接呼び出すことができます。ただし、これは最も文書化されたシステムではありません。
PHP呼び出しである必要がありますか? これは、単純な Javascript または AJAX 呼び出しを使用して実現できます。
編集: AJAX を介した PHP 関数呼び出しの例を追加しました。(jQueryを使用)
次に例を示します。
<?php
if(isset($_POST['functionToCall']))
{
$args = $_POST;
array_shift($args);
call_user_func($_POST['functionToCall'], $args);
} else {
?>
<html>
<head>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.7.2/jquery.min.js"></script>
</head>
<body>
<form id="myForm">
<input id="mytext" type="text" value="some value"/>
<input type="submit"/>
</form>
<button id="callBTN">Call Validation</button>
<div id="result"></div>
<script>
$(document).ready(function()
{
$('#callBTN').click(function()
{
//Values to pass (validate)
var inputVal = $('#mytext').val();
// Function to call in the PHP Side
var functionName = 'myFunctionCall';
//Form validation with pure JS+jquery (without calling PHP)
/*
if( !inputVal)
{
alert('text is empty');
} else {
alert('text is not empty');
}
*/
//Form Validation by calling a PHP function through AJAX
var selfURL = document.URL; //An example of calling itself
$.post(selfURL, {"functionToCall": functionName, "mytext": inputVal}, function(data) {
$('#result').html(data);
});
});
});
</script>
</body>
</html>
<?php
}
function myFunctionCall($args)
{
if(!empty($_POST['mytext']))
{
print 'The text submited was -> ' . $_POST['mytext'];
} else {
print 'There was no text submitted';
}
}
あなたが使用すると仮定すると、このように見えるかもしれませんjQuery
<script>
$('#form).submit(function(e){
e.preventDefault();
$.post($(this).attr('action'), $(this).serialize(), function(data){
// in data you'll have response from server, preferably JSON
}
});
</script>
<form action="form/handler.php" method="post" id="form">
<input type="text" name="name" value="" />
<input type="submit" />
</form>
form/handler.php
if(isset($_POST['name)){
// implement any logic you want and construct JSON response you need
$response = array('name' => $_POST['name']);
echo json_encode($response);
}
PHP にはコールバックがありません。フロントエンド テクノロジを使用して、イベントを整理および処理する必要があります。バックエンドと通信するには、AJAX を使用します。(別のphpページへの投稿/取得)
これは、クライアントで「モデル、ビュー、コントローラー」デザイン パターンと AJAX を利用することによって、PHP で概念的にのみ可能です (つまり、ステートフルな動作をエミュレートできます)。
PHP は「ステートレス」な方法で動作します。つまり、Web リクエストがあるたびに、PHP はその処理を実行し、レスポンスを送信すると完全に「立ち去ります」。MVC アプリを適切に設計すると、Web 要求をアプリ内の特定のメソッドだけに集中させ、AJAX を使用してフォームのコンテンツでそのメソッドを呼び出してから、実際にフォームを「送信」することができます。
「概念的に」と言いますが、これは大規模な最新の Web アプリでは一般的で推奨される方法であることに注意してください。私がこのように言う理由は、PHP に関する限り、まだ「完全な」Web リクエストを使用しているからです (ボタンは、通常の Web ページの更新と同じように PHP 関数を「呼び出し」ません)。ただし、MVC などのアーキテクチャを使用すると、すべてのページの読み込みをメソッド呼び出しに変換できます。
get
どのコードブロックが呼び出されるかを制御するパラメータを渡すことができます。
つまり、自分自身に戻るリンク:
siteurl/page.php?what_to_do=2
次に、上部の制御コード:
if($_GET['what_to_do']==1)
{
showMain();
}
elseif($_GET['what_to_do']==2)
{
showSpecial();
}
答えのためにプログラム全体を書き出すことなく、そのようなもの。