1

わかりましたので、jquery と従来の ASP を使用して、自分のサイトから新しいログイン フォームを作成しようとしています。現在、非表示に設定されているドキュメントに含まれる div があり、ユーザーがログイン リンクを選択すると、ページをフォームに重ねて div がフェードインします。ユーザーが送信をクリックすると、ページが POST され、div オーバーレイはなくなります。それよりももっとスムーズにしたいです。そのため、ユーザーが送信をクリックすると、jquery は ajax などを使用してバックグラウンドでデータベース接続ページに投稿し、その ASP から応答テキストを取得して、ログインの成功またはエラー ラベルの誤りを表示します。

サイトでクラシック ASP を使用して、前回のログインで送信時にフォーム データを取得しています。次に、DB をチェックして、入力された内容が一致するかどうかを確認します。

jQuery でこれらすべてを処理し、DB 接続を含む ASP ページにバックグラウンドでクエリまたはその他のメソッドを介して値を送信して、送信がクリックされたときにページがリロードされないようにしたいと考えています。

私はたくさんの例を見てきましたが、うまくいくようには思えません。

これまでの作業機能で見るべきFIDDLEがあります

どんな助けでも大歓迎です、前もって感謝します。

<table cellspacing="0" cellpadding="0" width="900" >
      <tr>
            <a href="index.asp" class="linkheader">Home</a>&nbsp;&nbsp;|&nbsp;&nbsp;
            <a href="index1st.asp">1st</a>&nbsp;&nbsp;|&nbsp;&nbsp;
            <a href="index2nd.asp">2nd</a>&nbsp;&nbsp;|&nbsp;&nbsp;
            <a href="index3rd.asp">3rd</a>&nbsp;&nbsp;|&nbsp;&nbsp;
            <a href="index4th.asp">4th</a>&nbsp;&nbsp;|&nbsp;&nbsp;
            <a href='#' id='login' class='linkheader'>Log In</a></td>
     </tr>
</table>

<!-- blur_login is transparent overlay. starts as hidden untill link is selected -->
<div id="blur_login">
    <!-- show_login is container for login form -->
    <div id="show_login">

        <a class="OKclose" href="#" >[ Close ]</a>

        <form method="" id="getin">
        <p><label for="Username">Username</label><br />
        <input name="Username" id="users" type="text" size="14" maxlength="14" autocomplete="off" tabindex="1"/>
        </p>
        <p><label for="last_name">Password</label><br />
        <input name="last_name" type="password" size="14" maxlength="14" autocomplete="off" tabindex="2" /><br />
            <label for="errors"></label>
        </p>
    <p><input type="submit" id="send" value="Log In &rarr;"></p>
</form>
    </div>
</div>

</p>

$(document).ready(function() {
$(window).bind("resize", function(){
   $("#blur_login").css("height", $(window).height());
   $("#blur_logout").css("height", $(window).height());
});

//Adjust height of overlay to fill screen when page loads
   $("#blur_login").css("height", $(document).height());

    $('#login').click(function(a){
        $("#blur_login").fadeIn();
        // Page focus on fadein is the username input
        $('#users').focus(); 
        a.preventDefault;
        return false;
    });

    $('#logout').click(function(b){
        $("#blur_logout").fadeIn();
        b.preventDefault;
      return false;
    });

    $('#send').click(function(c){
        //AJAX form submit here
    });

// Functions for login form
var $submit = $("input[type=submit]"),
    $inputs = $('input[type=text], input[type=password]');

// Checks if fields are empty, if so then disable loginbutton
    function checkEmpty() {
        return $inputs.filter(function() {
            return !$.trim(this.value);
        }).length === 0;
    }
// Enables the submit button when characters have been entered in each field
    $inputs.on('keyup blur', function() {
        $submit.prop("disabled", !checkEmpty());
    }).keyup();  // trigger any one

// When the close link is selected the window will fade out
   $(".OKclose").click(function(d){
      $("#blur_login").fadeOut();
       d.preventDefault;
      return false;
});   
});​
4

4 に答える 4

3

このために (jQuery の) AJAXを使用する必要性について、あなたは確かに正しいです。フォーム送信クリック ハンドラーに入力する必要があるものの例を次に示します。

$.ajax({
  type: "POST",
  url: "dbProcessing.asp",
  data: $('#loginForm').serialize(),
  success: function(){
  // Insert any changes into the DOM that you like
  // msg will be whatever you print out in dbProcessing.asp
  // so set it to 'success' or something if the login was successful
  // and then do an if statement to see what === msg and insert
  // a message into the DOM or redirect based on that
  }
});

より良い練習のために編集されました(コメントによる)

Edit2:今、私はただ不注意になっています

于 2012-07-27T19:48:16.030 に答える
3

これが私のページで使用するものです:

$('#loginbutton').click(function(event) {
    event.preventDefault(); /*  Stops default form submit on click */       
        $('#loginbutton').hide();                                                               //Hide Login Button
        $('#loginprogress').html('<img src="web/imgs/loader.gif"> Processing'); // Show Progress Spinner

        var username = $("#username").val();
        var password = $("#password").val();

        $.ajax({                                                                                        // Run getUnlockedCall() and return values to form
            url: "ajaxDispatcher.php?action=login",
            data: 'username=' + username + '&password=' + password,
            type: "POST",
            success: function(data){
                if (data == '') {
                    $('#loginbutton').show();                                               // Show Login button
                    $('.error').show();                                                     // Display login error message
                    $('#loginprogress').html('');                                           // Show Progress Spinner
                } else {
                    location.reload();
                    $('#logout').show();                                                        // Show logout button
                            $('#userinfo').show();
                    $('#loginprogress').hide();                                         // Hide Progress Spinner
                }
            }
            });
        });

一言で言えば、#loginbuttonjquery ボタンです。クリックすると、複数の送信を防ぐために非表示になります。ディスパッチャは、ID「username」と「password」の入力から渡された値を使用して、ログインをチェックする関数を実行します。成功すると、ログインが失敗した場合は false を返し (エラー警告を表示)、それ以外の場合は dom を操作するための値を返します。この例では、ログアウト ボタンを表示し、 div を非表示にしてloginprogress、「userinfo」という div を表示します。

于 2012-07-27T22:17:44.223 に答える
1

jQuerys post メソッドを使用してみてください:

$.post("dbProcessing.asp", $("#loginForm").serialize(), function(data)
{
    // TODO: function logic
});

ここでは、マニュアルを見つけることができますjQuery.post()

于 2012-07-27T19:56:38.487 に答える
0

フォームがページをリロードするのを防ぐために、これが私が使用しているものであり、すべての主要なブラウザーで動作することがテストされています。

function doStuff(e){
    e.returnValue = e.preventDefault && e.preventDefault() ? false : false;
    // handle AJAX here
}

もちろん、を呼び出すには、フォームにonsubmitを追加する必要がありますdoStuff(event);

于 2012-07-27T19:52:07.393 に答える