Объяснение JQuery AJAX Метод успеха - PullRequest
8 голосов
/ 18 мая 2011

Я пытаюсь использовать этот скрипт jQuery, и это меня смущает:

function CallService() 
        {
                $.ajax({
                    type        : varType, //GET or POST or PUT or DELETE verb
                    url         : varUrl, // Location of the service
                    data        : varData, //Data sent to server
                    contentType : varContentType, // content type sent to server
                    dataType    : varDataType, //Expected data format from server
                    processdata : varProcessData, //True or False
                    success     : function(msg) {//On Successfull service call
                    ServiceSucceeded(msg);                    
                    },
                    error: ServiceFailed// When Service call fails
                });
        }

Бит, который меня смущает, это объект успеха. Документация jQuery гласит:

success(data, textStatus, jqXHR)Function, Array

A function to be called if the request succeeds. The function gets passed three arguments: The data returned from the server, formatted according to the dataType parameter; a string describing the status; and the jqXHR (in jQuery 1.4.x, XMLHttpRequest) object. As of jQuery 1.5, the success setting can accept an array of functions. Each function will be called in turn. This is an Ajax Event.

Но подпись этого метода не похожа на:

success     : function(msg) {//On Successfull service call
                        ServiceSucceeded(msg);                    
                        }

Объект, в который мы, похоже, попадаем.

Вопросы:

1) Что означает function(msg){ServiceSucceeded(msg)}? 1015 *

2) Что такое «msg» в этом контексте?

3) Как же я должен знать, как структурировать метод sugnature для успеха?

Ответы [ 7 ]

15 голосов
/ 18 мая 2011

Совершенно резонный вопрос. :-) В JavaScript вам не обязательно вызывать функцию с таким количеством аргументов, которое она определяет, и вам не нужно определять столько аргументов, сколько вы можете вызвать. Что может сбивать с толку, если вы привыкли к более стесненным условиям. : -)

Особенности ответа:

1) Что означает функция (msg) {ServiceSucceeded (msg)}?

Он определяет функцию (анонимную), которая принимает один именованный аргумент (msg) и вызывает ServiceSucceded, передавая этот аргумент. jQuery вызовет функцию с тремя аргументами, определенными в документации jQuery для функции success, но эта конкретная функция success использует только первый из них (data). Подробнее об именованных функциях и анонимных функциях здесь .

2) Что такое «msg» в этом контексте?

Первый аргумент функции. Документы jQuery называют этот первый аргумент data, но вы можете называть его как хотите.

3) Как же я должен знать, как структурировать метод sugnature для успеха?

Вы правильно сделали, это в документации по jQuery.

Эта вещь в аргументах функций может сбивать с толку, поэтому давайте сделаем несколько примеров:

function foo(arg) {
    alert(arg);
}

Это совершенно ясно, я определяю функцию с именем foo, которая принимает один именованный аргумент, arg. И таким образом:

foo("Hi there"); // alerts "Hi there"

Но я тоже могу сделать это:

foo(); // alerts "undefined"

Там я не привел никаких аргументов для foo, поэтому в foo, arg не определено.

Я также могу сделать это:

foo("Hi there", "again"); // alerts "Hi there"

Я звоню foo с двумя аргументами, но foo использует только один из них.

Я мог бы определить foo, чтобы использовать столько аргументов, сколько вы передаете:

function foo() {
    var index;

    for (index = 0; index < arguments.length; ++index) {
        alert(arguments[index]);
    }
}

arguments - это автоматическая вещь, которую имеют все функции, которая является псевдомассивом (на самом деле это не Array) фактических аргументов, с которыми была вызвана функция. И так:

foo("Hi there", "again"); // alerts "Hi there", and then alerts "again"

Вы можете даже смешивать именованные и безымянные аргументы:

function foo(arg) {
    var index;

    alert(arg);
    for (index = 1; index < arguments.length; ++index) {
        alert("[" + arguments[index] + "]");
    }
}

Так что теперь

foo("Hi there", "again"); // alerts "Hi there" and then alerts "[again]"

Обратите внимание на [] вокруг второго предупреждения, потому что я начал цикл с индексом 1 вместо нуля.

arguments и именованные аргументы связаны:

function foo(arg) {
    alert("arg = " + arg);
    alert("arguments[0] = " + arguments[0]);
    arg = "Updated";
    alert("arg = " + arg);
    alert("arguments[0] = " + arguments[0]);
}

Если я сделаю foo("Hi");, то отобразятся следующие предупреждения:

arg = Hi
arguments[0] = Hi
arg = Updated
arguments[0] = Updated

(Если вы обновляете arguments[0]., То тоже самое)

6 голосов
/ 18 мая 2011

В функцию передаются 3 параметра: data, status и объект jqXHR. data - это то, что возвращается из вызова AJAX, status - это код статуса HTTP (я думаю), а jqXHR - это объект XHR в JQuery-оболочке.

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

Таким образом, используя success: function(msg), они получают только параметр data. Два других отправлены, но игнорируются.

ServiceSucceeded - это просто функция, которая вызывается с отправленным ей параметром data.

success: ServiceSucceeded мог бы и здесь сработать.

2 голосов
/ 18 мая 2011
  1. Это означает, что обработчик успеха вызывает ServiceSucceeded с ответом на запрос.
  2. msg содержит ответ на запрос. msg отображается на data в документации по jQuery.
  3. Вам нужно заглянуть в документацию jQuery для поиска подписи.
1 голос
/ 18 мая 2011

jquery Ajax - это способ связи с сервером (PHP, ASP и т. Д.).Давайте предположим, что вы используете PHP.функция «callService ()» отправляет запрос в «varUrl» (validation.php, т.е.) и получает (или POST -> varType) содержимое (varContentType -> valdation.php? id = 1231 & what = soemthing).Цель этого - получить некоторые данные на стороне сервера без перезагрузки страницы.Если вы хотите, чтобы validation.php был echo some html , тогда dataType в функции Ajax должен быть "html".См. Jquery.com для получения дополнительной информации о dataType.

Параметр success является обработчиком функции для ответа сервера.Успех вызывается, если вы получаете ответ от сервера, соответствующий запрашиваемому вами типу данных (html, json, text и т. Д.).В этом случае, если сервер отвечает правильно, вызывается функция «ServiceSucceeded» с атрибутом «msg», который является запрашиваемым ответом сервера.

1 голос
/ 18 мая 2011

Даже если функция успеха определена как принимающая три параметра (согласно приведенной вами документации), эти три параметра не являются обязательными - Javascript очень снисходительно относится к такого рода вещам; если вы пропустите параметр из вызова функции, он просто будет установлен на underfined, поэтому, если вы не попытаетесь его использовать, JS не выдаст никаких ошибок.

Код, который вы предоставили, дает только один параметр - msg - но в JS это совершенно правильно; это просто означает, что msg будет параметром data, определенным в документации, а textStatus и jqXHR будут неопределенными.

Это нормально, если в вашей функции успеха вы на самом деле не хотите использовать ни один из этих параметров. Если вы хотите использовать их, то передайте их, но если нет, то их можно отбросить. Вы пишете функцию успеха, поэтому вам нужно решить, какой из трех параметров использовать.

1 голос
/ 18 мая 2011
  1. Это анонимная функция .
    Это как обычная функция, но без имени.

  2. msg - первый параметр функции.

  3. Читая документацию.

1 голос
/ 18 мая 2011

1) Эта функция вызывается, если запрос AJAX успешен, т. Е. Сервер, с которым выполняется связь, возвращает код состояния успеха.

2) Я бы предположил, что «msg» - это данные, возвращаемые сервером,Два других аргумента не предоставлены и поэтому не используются.

3) Используйте документацию Jquery и возитесь, пока не получите то, что хотите.

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