0

次のようなJavaScript関数があります。

function triggerUpload(success, error, callback) {
    var options = {
        type: 'post',
        success: success,
        error: error
    };

    $("input[name=file]").change(function() {
        $(this).parent().ajaxSubmit(options);
    });
    if (callback) {
        callback();
    }
}

そして、私はそれを次のように使用します:

triggerUpload(function() {
   applyPostAjax(postUrl);
});

それは次のようにうまく機能します: 誰かが をクリックすると、オプションとして保持できるパラメーターが割り当てられ<a href='#' class="upload"> Upload</a>triggerUploadイベントが発生します。applyPostAjaxcallbacknull

注: これらのメソッドは他の誰かによってコーディングされたものであり、明確に理解できません。私はjavascriptの初心者です。

私の問題は次のとおりです。この関数には引数を1つだけ渡します。引数が に割り当てられると考える人もいるでしょうsuccess。どのように/なぜコールバックに割り当てられるのですか? これらsuccesserrorパラメータは何のためにここにあるのですか?

説明してください

4

2 に答える 2

0

他の人が言ったように、3 つのsuccesserror、およびcallbackはすべて関数にする必要があります。ただし、目的は異なります。

  • success - ajax 送信が正常に終了すると呼び出されます
  • error - ajax 送信でエラーが発生したときに呼び出されます
  • コールバック - サブミットで何が起こっても呼び出されます。これは、変更ハンドラが入力フィールドに割り当てられていることを確認するためだけに追加されたものだと思います。

つまり、triggerUpload を呼び出してもフォームは送信されません。ファイル入力ボタンにハンドラーをアタッチするだけです。変更すると、つまり、フォームが送信されたファイルを選択すると、その後応答が返されます。

于 2013-09-25T05:57:15.517 に答える
0

パラメータsuccessとは、メソッドがフォーム データを正常に送信するか、エラーが発生したerrorときに実行されるコールバック関数です (「コールバック」と呼ぶことにしたパラメータと同じです) 。ajaxSubmit

したがって、関数呼び出しでは、コールバックを指定しましたが、コールバックまたはコールバックは指定しsuccessませんでした。関数が実行されるため、操作がフォームを正常に送信したと見なすことができます。errorcallbackajaxSubmit

success引数がではなく に代入されると考えるのは 100% 正しいでしょうcallback


jQuery Forms Plugin の完全なドキュメントは、http://malsup.com/jquery/form/ で入手できます

そしてここ:https://github.com/malsup/form

具体的には、successコールバックのドキュメントには次のように記載されています。

成功

フォームが送信された後に呼び出されるコールバック関数。「成功」コールバック関数が提供されている場合、サーバーから応答が返された後に呼び出されます。次の引数が渡されます。

1.) responseText または responseXML 値 (dataType オプションの値による)。

2.) ステータステキスト

3.) xhr (または jQuery < 1.4 を使用している場合は jQuery でラップされたフォーム要素)

4.) jQuery でラップされたフォーム要素 (jQuery < 1.4 を使用する場合は未定義)

これが意味することは、成功関数の正しいプロトタイプは次のようにする必要があるということです。

triggerUpload(function(response,status,xhr,form) {
   applyPostAjax(postUrl);
});

ただし、javascript では、正式な宣言に存在する引数よりも少ないまたは多い引数で関数を呼び出すことができるため、関数に提供するパラメーターの数を増減してもまったく問題ありません。したがって、アップロード機能の結果のみに関心がある場合は、次のようにします。

triggerUpload(function(response) {
   applyPostAjax(postUrl);
});

または、サーバーからの応答を気にしない場合は、以前と同じように呼び出すことができます。

于 2013-09-25T05:51:05.230 に答える