2015-10-05 57 views
0

我有一个问题,当我在MySQL调用REST服务邮寄到更新表。 我与BackboneJS工作,并单击保存按钮时,调用服务,并通过POST参数骨干 - 休息POST服务被称为不止一次

$.ajax({ 
    type: 'POST', 
    url: rootURL, 
    data: dataJson, //data send to REST service by POST 
    cacheControl: "no-cache", 
    dataType: "json", 
    success: function(data){ 
     console.log("OK"); 
    }, 
    error: function(data){ 
     console.log(data.msg); 
    } 
}); 

但出现问题时的收入,离开编辑屏幕。假设我做了一个改变,它完美地将我带回一个“OK”,当我重新回到编辑屏幕并再次录制时,我得到了两次“OK”。

如果我重复此步骤进入和退出画面编辑,重复的响应是基于次数为屏幕版本。

我不知道这是否是一个关于我做错了与BackboneJS ...问题?我这样做:

editAdverts: function(){ 
    var editAdvertsView = new EditAdvertsView(); 
    $('#container-page').append(editAdvertsView.render(idAdverts).el); 
} 

它也可以是AJAX的话题?

我希望有人能帮助我这个问题,因为我不是在BackboneJS专家

非常感谢! Diego

+0

请你可以发布大量代码尽可能,我相信你有僵尸的观点。 – Brent

回答

0

很难说没有更多的代码,但我敢肯定,这是因为你每次使用editAdvert都要创建一个模型。

而是创建模型的每次只需创建一个在您的视图的初始化,然后调用获取/保存功能,任何时候你需要更新了。创建模型就足够了。

编辑:僵尸的观点是检查过布伦特在评论注意到,我们不能没有更多的代码告诉一件好事。

+0

如果我使用GET Ajax进行调用,我不会感觉到同样的错误。任何想到这个问题在POST中。如果没有更多的代码, – dieh1984

+0

是无法说明的 –

0

这是关于路线德代码:

var Index = { 
     start: function() { 
      var list_view = new MainView(); 
     } 
    }; 

    var AppRouter = Backbone.Router.extend ({ 
     routes: { 
      'goAdvert'   : 'goAdvert' 
     }, 

     goAdvert: function(){ 
      var viewAdvertsView = new ViewAdvertsView(); 
      $('#container-page').append(viewAdvertsView.render().el); 
     } 
    }); 

    var MainView= Backbone.View.extend({ 
     el: $('#contenedor-body'), 

     initialize: function() { 

      this.render(); 
     }, 

     render: function() { 
      // here is the code about main page. It's not important!     
     }, 


    });  

    new AppRouter; 
    Index.start(); 
    Backbone.history.start(); 

这是viewAdvertsView.js

define([ 
    'jquery', 
    'underscore', 
    'backbone', 
    'jqueryuniform', 
    'bootstrap', 
    'handlebars', 
    'jqueryDataTables', 
    'dtBootstrap', 
    '../../view/editAdvertsView', 
], function($, _, Backbone, jqueryuniform, Bootstrap, Handlebars, JQueryDataTables, DtBootstrap, EditAdvertsView){ 

     var viewAdverts = Backbone.View.extend({ 

      events: { 
       'click #edit'  : 'editAdvert' 
      } 


      editAdvert: function(){ 

       $('#container-page').empty(); 

       var idAdvert = $(event.target).data('id'); 

       editAdvertView = new EditAdvertsView(); 
       $('#container-page').append(editAdvertView.render(idAdvert).el); 

      }, 

      render: function() { 

       // load viewAdverts 

      }   

     });  

     return viewAdverts; 
    } 
); 

这是editAdvertsView.js

define([ 
     'jquery', 
     'underscore', 
     'backbone', 
     'jqueryuniform', 
     'bootstrap', 
     'handlebars', 
     'jqueryDataTables', 
     'functions', 
     'sessionManage', 
     'slimscroll', 
     'jqueryCustomSlimscroll', 
     'slimscrollMin', 
     'jqueryblockui', 
     'text!../../html/editAdverts.html', 
     'maps', 
     'fancybox' 
    ], function($, _, Backbone, jqueryuniform, Bootstrap, Handlebars, JQueryDataTables, 
       Functions, SessionManage, Slimscroll, JqueryCustomSlimscroll, SlimscrollMin, 
       Jqueryblockui, EditAdverts, Maps, Fancybox){ 

     var Advert= Backbone.View.extend({ 
      el: $('#container-page'), 

      events: { 
       'click #saveChanges'   : 'doSaveChanges' 
      }, 

      doSaveChanges: function(){ 
       var data = null; 

      var rootURL = "http://localhost/php/slim/slim/advert/update" + "?date=" + $.now(); 

       dataJson = { 
        id: $("#id").val(), 
        product: $("#product").val(), 
        price: $("#price").val(), 
        client: $("#client").val(), 
        country: $("#country").val(), 
        tel: $("#telephone").val(), 
        cel: $("#cellphone").val() 
       }; 


       $.ajax({ 
        type: 'POST', 
        url: rootURL, 
        data: dataJson, 
        cacheControl: "no-cache", 
        dataType: "json", 
        success: function(data){ 

         console.log("OK");   

        error: function(data){ 

         console.log(data.msg);   

        } 
       } 
      }, 

      render: function(codInmueble) { 

       var self = this; 

       var editTemplate = Handlebars.compile(EditAdverts); 
       self.$el.html(editTemplate()); 

       return this; 
      }   

     });  

     return Advert; 
    } 
);