0

JQuery スクリプトについていくつか質問があります (私は JQuery の世界が初めてです)。

ビューページには、次のリンクがあります。

        <li>
            <a id="byHeader" href="<c:url value="/mapping/header" />">By presence of header</a>
        </li>

このリンクをクリックすると、「/mapping/header」フォルダーへの HTTP リクエストが生成されます。

ビュー ページには、前のリンクに関連する次の JQuery コードもあります。

$("#byHeader").click(function(){    // Select the link having id="byHeader" and  assign to it the following callback function executed on the click event
    var link = $(this);             // Variable refered to the link tag that triggered the event

    /* La chiamata AJAX non viene invocata su un oggetto particolare (quindi direttamente su $)
       I parametri di input sono: 1) L'URL del link selezionato 2) Il tipo di risposta previso (una stringa)
    */
    $.ajax({ url: this.href, dataType: "text", 
        // Before sending the HTTP Request: execute a function that add an Header to this HTTP Request
        beforeSend: function(req) { req.setRequestHeader("FooHeader", "foo"); }, 
        // Success case:
        success: function(form) { 
            MvcUtil.showSuccessResponse(form, link); 
        }, 
        // Error case:
        error: function(xhr) { 
            MvcUtil.showErrorResponse(xhr.responseText, link); 
        }
    });
    return false;
});

おそらく私の疑問は些細なことであり、JQuery の知識が不足していることに依存しています...

1) 最初の dount は、次のコード行の req 変数を考慮します。

        beforeSend: function(req) { req.setRequestHeader("FooHeader", "foo"); },

このコード行により、HTTP リクエストにヘッダーを追加してサーバーに送信していると思います。

私の問題は、「req」という名前の変数が何を指しているのかを理解することです。これは私のHTTPリクエストに言及されていると思いますが、私の問題は、以前に宣言したことがないことです...以前にコードで宣言したことがなくても使用しています(そしてうまく機能します)!!! なぜそれが機能するのですか?

beforeSend を使用すると、関数の HTTP 要求への参照を含むパラメーター変数が自動的に作成されると考えています...しかし...最終的に、それが正しいかどうかわかりません...

2) 次のコード行に関する 2 番目の疑問:

        success: function(form) { 
            MvcUtil.showSuccessResponse(form, link); 
        }, 

これらのコード行は、成功の場合 (スクリプトがヘッダーを HTTP 要求に追加できる場合) を処理します...

JQueryの成功APIドキュメントを読んで、成功メソッド(メソッドですか?そうですか?)がサーバーから返されたデータをパラメーターとして受け入れることを理解しました...

コードでわかるように、サーバーはクライアントにテキスト文字列を返します (実際には、dataType: "text" があります)...前のコード行で、パラメーターが "form" と名付けられているのはなぜですか?

サーバーは、「フォーム」ではなくテキストをクライアントに返します...何か不足していますか?

そして...この場合も:フォーム変数を作成していません。これは、サーバーから返されたデータを含む「汎用」変数であり、前の行でJSON形式を使用しているため、使用できますアヤックスコール?

どうもありがとうございました

アンドレア

4

1 に答える 1

0
  1. jQuery ajax システムによって作成reqされ、コールバックのパラメーターとして渡されます。

  2. わかりません、変数の奇妙な名前です...あなたが正しい場合dataTypetext結果はプレーンな文字列として返されます。

    変数を作成しない場合は、返されるデータ (この場合は文字列) が jQuery によって作成され、コールバックのパラメーターとして渡されます。

「変数」と「関数パラメーター」の概念に混乱しているようです。「グローバル変数」と「変数スコープ」についてもっと読むことをお勧めします。要するに、reqそれらの関数formからのみ利用可能であり、それらの外部のコードはそれにアクセスできません。OTOH のように変数を宣言すると、同じスコープ内のすべてのコードがそれにアクセスできます (関数の外で宣言すると、グローバルになるため、すべてのコードがアクセスできます)。var x

于 2012-11-19T23:34:48.270 に答える