-3

Есть функция, которая представляет собой каркас ajax-запросов:

    /*Структура для ajax-запросов:
    method - тип запроса (get,post,update,delete), убрано в связи с jsonp
    async - boolean, вкл/откл асинхронность,
    address - url запроса,
    transport_data - данные на отправку,
    function_on_success - функция, которая выполнится при удачном запросе,
    parameters_for_fun_as_obj - объект с набором параметров для удачной функции*/
function create_ajax(async,jsonp_callback,address,transport_data,function_on_success,parameters_for_fun_as_obj){
$.ajax({
    method: 'get',
    dataType: 'jsonp',
    //jsonp: false,
    jsonpCallback: jsonp_callback,
    contentType: "text/json; charset=utf-8",
 async: async,
 url: address,
 global: true,
 crossDomain: true,
 data: transport_data, 
 success: function (data) {
     function_on_success(data, parameters_for_fun_as_obj);     
 }
});

Как присвоить значение локальной переменной в функции результатов запроса, используя данный каркас? Таким образом не получается сделать - запрос выполняется, функция тоже, данные не пустые, но не присваивается.

function my_function(){
  var temp;
  temp = create_ajax(true,'result',address,'',return_data);
}

var return_data = function(data){ return data;
}

Ajmda
  • 139
  • Никак. Невозможно. – Alexey Ten Jul 15 '16 at 05:21
  • @Alexey Ten - я бы не сказал, что невозможно. Как минимум - вставить текстом данные в элемент на странице, потом его спарсить в объект. Но это слишком костыльно – Ajmda Jul 15 '16 at 06:38
  • Это не будет "присвоить локальной переменной" – Alexey Ten Jul 15 '16 at 06:40

2 Answers2

2

Код асинхронный, помогут промисы. Вот пример реализации на jQuery:

function ajaxRequest(async,jsonp_callback,address,transport_data,function_on_success,parameters_for_fun_as_obj){
  return $.ajax({
    method: 'get',
    dataType: 'jsonp',
    //jsonp: false,
    jsonpCallback: jsonp_callback,
    contentType: "text/json; charset=utf-8",
    async: async,
    url: address,
    global: true,
    crossDomain: true,
    data: transport_data
  });
}

//Этот код выполнится только после успешного выполнения ajax запроса
ajaxRequest(async,jsonp_callback,address,transport_data,function_on_success,parameters_for_fun_as_obj).then(function(data){
  my_function(data);
});
d4rkm3z
  • 161
  • 7
  • $.ajax уже возвращает promise, нет нужды делать $.Deferred() вручную, ну сейчас теряется ответ пришедший от сервера, потому что внутри my_function к нему нет никакого доступа – Grundy Jul 15 '16 at 12:54
  • Ох, спасибо, я немного прорефакторил код. – d4rkm3z Jul 15 '16 at 13:19
-1

Если я правильно понял вашу задумку:

function what_doing(data){
  return data * 1.5;
}

function sum(a,b,f_name){ var result = a+b; if(result > 0){ return f_name(result); }else{ return false; } }

function go(){ var temp; temp = sum(5,3,what_doing); console.log(temp); // ->12 }

go();

RostD
  • 758