jQuery $ .ajax успех должен быть функцией обратного вызова? - PullRequest
2 голосов
/ 28 марта 2010

Я создал функцию-обертку для метода jQuery $ .ajax (), чтобы я мог передавать разные dataTypes и переменные post - например, так:

function doPost(dType, postData, uri){

    $.ajax({
        url: SITE_URL + uri,
        dataType: dType,
        data: postData,
        success: function(data){
          return data;
        });
}

Проблема в том, что я получаю данные (которые всегда в формате JSON). Я попытался установить var ret перед вызовом функции $ .ajax () и установить его как ret = data в функции успеха. Я что, глупо об этом? Если я не установлю функцию успеха, будет ли $ .ajax просто возвращать данные? Или это просто success: return data? Или для success требуется функция обратного вызова для обработки данных, которая может быть просто return data?

Ответы [ 2 ]

1 голос
/ 28 марта 2010

Ну, вы внутри функции - используйте переменную область видимости; -)

function doPost(dType, postData, uri) { 
    var result;
    $.ajax({ 
        url: SITE_URL + uri, 
        dataType: dType, 
        data: postData, 
        async: false,
        success: function(data){ 
          result = data;
        }); 
    return result;
} 

Это на самом деле работает, но я думаю, что часть async обязательна ... В противном случае вызов $.ajax немедленно вернется, и result все равно будет неопределенным - вы всегда получите undefined как результат вашего вызова функции.

Однако, когда вы делаете вызов $.ajax синхронным, он блокируется до тех пор, пока данные не будут получены, и вы можете вернуть данные как result вашей собственной функции.

Но вы должны понимать, что при использовании этого метода никакой другой код не будет выполняться до тех пор, пока не закончится загрузка ajax!

1 голос
/ 28 марта 2010

Когда вы вызываете $ .ajax (), он создает запрос и затем переходит к следующему. Он не сидит и не ждет возврата и блокирует следующие строки кода. Это означает, что, если функция обратного вызова success не может вернуть значение данных для функции doPost.

Если вы действительно хотите иметь функцию-оболочку, вы можете сделать что-то вроде этого:

function doPost(dType, postData, uri, success){
    $.ajax({
        url: SITE_URL + uri,
        dataType: dType,
        data: postData,
        success: success
    });
}

И определите ваш обработчик успеха, когда вы вызываете doPost, но функция-обертка на самом деле мало что вам делает.

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