2016-02-08 3 views
2

Я действительно новичок в javascript, и у меня появилась первая проблема с запросом jquery и AJAX. У меня есть много переключателей на странице, и когда я нажимаю на них, я должен попросить службу REST запросить, могу ли я или нет. Если я могу, я покажу окно с предупреждением, вы уверены, что blablabla и если не предупреждение, которое говорит, что пользователь не может.jquery (a) синхронный запрос ждать

Вот основная проблема: если я использую async: false, это работает, но поскольку я мог читать, это не очень хорошая практика (и хром помнит меня, а это не так), так что это хороший способ сделать это?

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

Каков хороший способ сделать это?

startService: function(serviceName){ 
     var confirm = true; 

     var $paid = this.model.getPaidTo(serviceName); 
     console.log(this.model.getPaidTo(serviceName)); 
     //Here the consol.log is always undefined if I use async: true 

     if ($paid == 'false'){ 
      confirm = confirm("Are you sure to start" + this.model.services[serviceName].price + ". Continue ?"); 
     } 

     if(confirm){ 
      console.log("start " + serviceName + " service") 
      return true; 
     } 
     return false; 
    }, 

Модель:

getPaidTo: function(serviceName){ 
     var self = this; 
     var Url = require.apiUrl + "profile/girl/" + this.loginModel.id + "/checkservice/" + serviceName; 

     $.ajax({ 
      type: "GET", 
      url: Url, 
      data: {}, 
      success: function(data){ 
       return data.data.service; 
      }, 
      error: function(data){ 
       self.error = 'error'; 
       return 'error'; 
      } 
     }); 
    } 

С наилучшими пожеланиями

+2

Вам необходимо написать асинхронный код. Используйте обещания. – SLaks

+0

http://stackoverflow.com/questions/14220321/how-do-return-the-response-from-an-asynchronous-call – epascarello

ответ

0

Благодаря Slaks,

Это прекрасно работает. Вот как я сделал изменения:

startService: function(serviceName){ 
     var self = this; 
     var confirm = true; 

     //var $paid = this.model.getPaidTo(serviceName); 
     this.model.getPaidTo(serviceName).done(function(data){ 
      $paid = data.data.service; 

      if ($paid == 'false'){ 
       confirm = window.confirm("Are you sure to start" + self.model.services[serviceName].price + ". Continue ?"); 
      } 

      if(confirm){ 
       console.log("start " + serviceName + " service"); 
      } 

     }).fail(function(){ 
      alert('error'); 
     }); 
    }, 

Модели:

getPaidTo: function(serviceName){ 
     var Url = require.apiUrl + "profile/girl/" + this.loginModel.id + "/checkservice/" + serviceName; 

     return $.ajax({ 
      type: "GET", 
      url: Url 
     }); 
    } 

Надеется, что это будет помогает другим людям.

С уважением

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