Передайте функцию обратного вызова success с аргументами другой функции, которая выполняет вызов AJAX - PullRequest
0 голосов
/ 17 октября 2019

Я новичок в javascript и пытаюсь понять, возможна ли следующая вещь:

Допустим, я использую следующую конструкцию ajax-запроса в нескольких местах в моем коде (с разными функциями обратного вызова - только в этом примереhandleSuccessCallback()) и другой URL-адрес и параметр запроса данных:

  jQuery.ajax({
        type: 'GET',
        url: loadUrl,
        data: data,
        error: errorCallback,
        success: function(response) {
            this.handleSuccessCallback(response);
        }
    }); 

function handleSuccessCallback(response) {
     Do something with response here...
}

Я хотел реорганизовать этот код таким образом, что мне не нужно создавать конструкцию выше каждый раз, когда мне нужно отправить запрос. Я хотел создать функцию в своем классе утилит, которая будет принимать URL, запрашивать данные и обратный вызов ошибки / успеха. Примерно так:

 function sendAjaxRequest(url, data, errorCallback, successCallback)
  jQuery.ajax({
        type: 'GET',
        url: url,
        data: data,
        error: errorCallback,
        success: successCallback
  }); 
 }

Затем я хотел вызвать эту функцию несколько раз, передавая разные аргументы из моего основного скрипта.

В моем основном коде:

var url = "https://some url";
var data = {};
var errorCallback = handleErrorCallback();
var successCallback = handleSuccessCallback(); // ??? This function requires `response` argument being passed, how it can be done?

utils.sendAjaxRequest(url, data, errorCallback, successCallback);


function handleSuccessCallback(response) {
     Do something with response here...
}

function handleErrorCallback() {
     Do something with error here...
}

Однако я не понимаю следующее: как передать функцию успешного обратного вызова (handleSuccessCallback(response)) в функцию sendAjaxRequest(), если моему handleSuccessCallback(response) нужны параметры, являющиеся результатом успешного обратного вызова ajax (response)?

Как я могу передать этот response параметр в handleSuccessCallback() при передаче его в sendAjaxRequest(), еслиЯ еще не знаю, что будет response от вызова ajax?

1 Ответ

1 голос
/ 17 октября 2019

Когда вы хотите позвонить:

function sendAjaxRequest(url, data, errorCallback, successCallback)

Вам просто нужно дать имена функций для errorCallback и successCallback. Вы передаете ссылки на функции, чтобы они могли быть вызваны другим кодом. Параметры предоставляются в точке, где эти функции вызываются, как в вашем первоначальном примере:

success: function(response) {
        this.handleSuccessCallback(response);
    }

Здесь функция успеха, как определено в ajax с первым параметром как response, так что у вас естьздесь анонимная функция с первым параметром как response.

Так что вам просто нужно определить ваши функции, чтобы они соответствовали тем, что они будут, когда они будут вызваны ajax, например:

var firstSuccessCallback = function(response) {
    //do something;
}

var firstErrorCallback = function(error) {
    //do something;
}

Вы можете сделать:

sendAjaxRequest(url, data, firstErrorCallback, firstSuccessCallback)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...