1

Здравствуйте.

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

var searchSku = function(val){
  var path = "/search.json?q=",
      sku  = val;
  jQuery.ajax({
    url: path + val,
    type: 'get',
    dataType: 'json',
    success: function($data) {
      var b = $data.id; //тут мы получаем значение
    },
  });

// как вернуть это значение? return };

Cheg
  • 10,486

2 Answers2

2

Т.к. ответ приходит в формате JSON, сначала его нужно разобрать с помощью JSON.parse.

var searchSku = function(val) {
  var path = "/search.json?q=";

return jQuery.ajax({ url: path + val, type: 'get', dataType: 'json', success: function($data) { var deferred = $.Deferred();

  switch (data.code) {
    case 200:
      deferred.resolve((JSON.parse($data)).id);
      break;
    default:
      deferred.reject();
      break;
  }

  return deferred.promise();

}

}); };

Использование:

$.when(searchSku("text"))
  .then( function(data){
     alert(data); // $data.id
 });
  • Спасибо за ответ, но нужно вернуть в функцию searchSku(), в данном примере return возвращает в дочернюю функцию только – Виктор Jul 21 '17 at 18:52
  • @Виктор В функцию вернуть нельзя, можно вернуть только как результат выполнения функции. Дополнил ответ работой с промисами, возможно, в таком стиле функция будет более удобной в работе. – Pavel Dmitrenko Jul 21 '17 at 19:02
  • спасибо большое! – Виктор Jul 21 '17 at 19:08
0

используем async:false и старый добрый eval

var searchSku = function(val){
  var path = "/search.json?q=",
      sku  = val,
      b;
  $.ajax({
    url: path + val,
    type: 'get',
    dataType: 'json',
    async:false,
    success: function(data) {
      b = eval('('+data+')'); //тут мы получаем значение
    },
  });

  // просто возвращаем
  return b.id;
};
LiaVa
  • 1,105
  • 9
  • 20