2014-12-16 4 views
0

Я использую Edmunds API SDK для получения информации о транспортном средстве для одного из моих проектов, и у меня есть функция, которая отображает результаты, как только изображение автомобиля будет отображаться. Таким образом, отображение результата происходит после вызова ajax для получения изображения. У меня есть настройка Ajax вызова следующим образом:Сделайте что-нибудь после завершения ajax-звонка

self.getCarPic = function() {  
      // Optional parameters 
      var options = { "styleId" : $options.val() }; 

      // Callback function to be called when the API response is returned 
      function success(res) { 

       for(var i in res){ 
        // Looking for the front view shot of the car 
        if (res[i].shotTypeAbbreviation === "FQ") { 
         url = "http://media.ed.edmunds-media.com" + res[i].photoSrcs[res[i].photoSrcs.length-1]; 
         break; 
        } 
        // If its not available, get whatever they have on the api 
        else { 
         url = "http://media.ed.edmunds-media.com" + res[0].photoSrcs[res[i].photoSrcs.length-1]; 
        } 
       } 
       // If there is no image at all just return the default car pic 
       if (! url) { 
         url = defaultPic; 
       } 
      } 
      // If an error occurs just set the url to default car pic 
      function fail(data) { 
       url = defaultPic; 
      } 

      // Fire the API call 
      res.api('/v1/api/vehiclephoto/service/findphotosbystyleid', options, success, fail); 
     }; 

И у меня есть другие настройки функции для отображения результата следующим образом:

self.getResult = function() { 
       var x = self.getCarPic; 

       $.when(x).done(function(){ 
        // display result code 
       } 
    }; 

Это не кажется, работает, потому что функция отображения запускается на выполнение до AJAX вызов завершается. Я знаю, что getCarPic должен быть объектом обещания, но как мне это сделать, когда я использую SDK Edmunds? Я не могу использовать глобальные функции, такие как ajaxComplete, потому что я не хочу, чтобы это мешало другим вызовам ajax, которые у меня есть.

+0

Похоже, что 'self.getCarPic' не является объектом обещание, но только регулярная функция. Вот почему код не работает. –

+0

Пусть ваш 'getCarPic' принимает параметр функции - это было бы вашим обещанием. 'getCarPic' может затем выполнить вашу функцию, когда api преуспеет. – Jasen

+1

Я смотрю на код, похоже, что их SDK использует jsonp для вызова (который не обрабатывает объекты обещаний и т. Д.). Обратите внимание, как они обрабатывают ошибки в типичном режиме «тайм-аута». Я бы рекомендовал просто обрабатывать вещи в рамках вашей функции успеха. –

ответ

1

Попробуйте

$.ajax({url: '/'}).done(function(data) {}); 
+0

Не могли бы вы объяснить, что здесь происходит? и где я должен это делать? – user3312508

+0

Замените '/' на адрес, который вы вызываете, данные будут содержать ответ, а затем после данных между {} тегами вы сможете обработать ответ. – RickJames

Смежные вопросы