javascript - 如何将我的 Ajax 处理移动到一个函数中?

标签 javascript jquery ajax

我有以下代码:

  function submitHandler($link, $modal, close) {

    var $form = $modal.find('#main-form');
    var $submitBt = $modal.find('.block-footer button:contains("Submit")');
    var oSubmit = {
        $form: $form,
        $modal: $modal,
        action: $form.attr('data-action'),
        entity: $form.attr('data-entity'),
        href:   $form.attr('data-href'),
        row: $link.attr('data-row'),
        $row: $('#row_' + $link.attr('data-row')),
        $submitBt: $submitBt
    };

    if (!$form.valid || $form.valid()) {
        $submitBt.disableBt();
        $modal.removeBlockMessages()
            .blockMessage('Contacting Server, please wait ... ', { type: 'loading' });
        $.ajax({
            url: oSubmit.href,
            dataType: 'json',
            type: 'POST',
            data: $form.serializeArray()
        })
        .done(function (json, textStatus, XMLHttpRequest) {
            json = json || {};
            if (json.success) {
                submitSuccessModal(oSubmit, json);
                if (close == true) {
                    $modal.closeModal();
                    if (oSubmit.action == "Create") {
                        $('#createLink').prop('disabled', false);
                    }
                }
            } else {
                submitFailModal(oSubmit, json);
            }
        })
        .fail(function (XMLHttpRequest, textStatus, errorThrown) {
            setTimeout(function () {
                $modal
                    .removeBlockMessages()
                    .blockMessage('Could not contact server, please try again', { type: 'error' });
                $submitBt.enableBt();
            }, 1000);
            return false;
        });
    };
};

将功能从我的 $.ajax 移出并移出到一个用于“完成”的函数和另一个用于“失败”的函数中的最佳方法是什么。我还应该将哪些参数传递给这些函数?我想我最困惑的是我应该如何处理我在代码顶部声明的变量。我是否应该像在 .done 中那样将这些也传递给外部函数,我确实引用了其中的一些函数。

最佳答案

您现在必须使用所谓的匿名函数。您将对匿名函数(没有名称的函数)的引用传递给 donefail 函数。

也许为了更好地组织您的代码(或使这些函数可以与其他代码共享),您需要做的就是为这些函数命名并将它们移到 ajax() 调用之外。我们称它们为 onDoneonFail,当然您可以随意调用它们。

请注意,我在引用它们时没有使用括号,因为我指的是函数对象本身,而不是被调用函数的返回值。

  function onDone(json, textStatus, XMLHttpRequest) {
       json = json || {};
       if (json.success) {
           submitSuccessModal(oSubmit, json);
           if (close == true) {
               $modal.closeModal();
               if (oSubmit.action == "Create") {
                   $('#createLink').prop('disabled', false);
               }
           }
       } else {
           submitFailModal(oSubmit, json);
       }
   }

   function onFail(XMLHttpRequest, textStatus, errorThrown) {
       setTimeout(function () {
           $modal
               .removeBlockMessages()
               .blockMessage('Could not contact server, please try again', { type: 'error' });
           $submitBt.enableBt();
       }, 1000);
       return false;
   }

   $.ajax({
       url: oSubmit.href,
       dataType: 'json',
       type: 'POST',
       data: $form.serializeArray()
   })
   .done(onDone) //Reference to onDone, without parenthesis
   .fail(onFail);

关于javascript - 如何将我的 Ajax 处理移动到一个函数中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12454233/

相关文章:

java - Spring 包含在同一表单中的多个 jsp 在 Ajax 回调上给出错误

javascript - 将数组元素从 javascript 传递到 php

javascript - 设置要在另一个函数中使用的变量

javascript - 插入 Google Analytics 代码的最佳位置

javascript - jQuery 追加 x 元素列表

javascript - 滑动切换时加载另一个页面

javascript - 在 JavaScript 中暂停 YouTube iFrame API

javascript - 使用 Javascript 更改框架的 URL

javascript - HTML/jQuery onload/load 在 iOS 上未执行

php - 使用 JQuery、AJAX 和 php 创建 JSON 数据