Как вернуть результат вызова JSONP вне функции? - PullRequest
2 голосов
/ 27 августа 2009

У меня есть следующая функция, которая прекрасно работает, я использовал JSONP для преодоления междоменной области, написал модуль http для изменения типа контента и не добавил имя обратного вызова в URL.

function AddSecurityCode(securityCode, token) {
var res=0;
$.ajax({ url: "http://localhost:4000/External.asmx/AddSecurityCode",
    data: { securityCode: JSON.stringify(securityCode),
        token: JSON.stringify(token)
    },
    dataType: "jsonp",
    success: function(json) {
        alert(json); //Alerts the result correctly
        res = json;
    },
    error: function() {
        alert("Hit error fn!");
    }
});
return res; //this is return before the success function? not sure.

}

переменная res всегда указана неопределенной. и я не могу использовать async = false с JSONP. так как я могу вернуть результат за пределы функции ?? и я обязательно должен сделать это для последующих вызовов.

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

Ответы [ 3 ]

6 голосов
/ 27 августа 2009

Вы просто не можете этого сделать.

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

function AddSecurityCode(securityCode, token, callback) {

    $.ajax({
        ....
        success: function(json) {
            alert(json); //Alerts the result correctly
            callback(json); // HERE BE THE CHANGE
        }
        ....
    });
}
0 голосов
/ 02 мая 2014

Добавить асинхронное значение: false к объекту запроса ajax

$.ajax({
   ...
   async: false,
   ...
});
return res;

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

0 голосов
/ 27 августа 2009

Вы объявили res внутри функции, сделав ее область видимости локальной для этой функции. Так что есть начало. Объявите res вне функции и посмотрите, что произойдет.

...