2017-09-15 60 views
0

我想立即向DB提出請求。問題是:我無法清除以前的ajax請求的結果,即使我清除包含它的數組時,當我輸入更快時也不起作用。Vuejs無法清除之前ajax的結果

第二個(較小的:D)問題是我必須使嵌套循環,使其工作。

我想很多時間來解決這些問題......

Click to see an image

組件1:HTML

<input v-model="invoice_number" type="text" name="invoice_number" class="form-control" id="" placeholder="Invoice number" @keyup="max_invoice_number" required> 

組件1:JavaScript的

max_invoice_number: function() { 

     axios.get('/max_invoice_number/' + this.invoice_number) 
     .then(response => this.max_invoice_response.push({ 
      info: response.data 

     })); 

     Event.$emit('max_invoice_response', this.max_invoice_response); 
    }, 

組件2 HTML

<div v-for="a in max_invoice_response" class="bg-success col-xs-12"> 
      <div v-for="b in a">{{b.info}}</div> 
     </div> 

元器件2的Javascript

data(){ 
     return{ 

      ref_numbers: [], 
      max_invoice_response: [] 
     } 
    }, 

    created: function(){ 

     Event.$on('max_invoice_response', function(response) { this.clear; this.max_invoice_response.push(response); }.bind(this)); 

    }, 

    methods: { 
     clear: function() { 
      this.max_invoice_response.splice(0); 
     } 

    }, 
} 
+1

難道你不會在你創建的方法中忘記'this.clear'上的圓括號嗎? (應該是'this.clear()') –

+0

謝謝你的回答,但它不是:) – Flash

回答

1

從丟失的括號確定開,從而假設清楚方法被調用,並在組件2中的陣列被清空。

我每次進行AJAX調用時,都會將組件1的響應數據存儲在this.max_invoice_response(組件1上)中。下一步是您將this.max_invoice_response作爲有效負載發出。此字段包含迄今收到的全部回覆。

因此,在處理組件2中的事件時,您也會收到所有響應。在清除數組的同時,它仍將所有響應推送到組件2的this.max_invoice_response。因此,您還需要清除組件1,或者只是覆蓋已存儲的數據。

但要小心! HTTP響應被處理爲異步。由於每觸發一個鍵,第二個字母的響應可能早於第一個字母的響應。

+0

謝謝trieng幫助我,但這不是因爲我有組件1上的那行,但我刪除它當我在這裏複製時,我錯了。在這裏你可以看到代碼https://github.com/iliyan940/euromedic_v2/tree/master/resources/assets/js/components – Flash

+0

我看到了,更好地更新你的問題,以便其他人也知道。 如果您慢速鍵入(每5秒一次鍵入),是否會發生相同的錯誤? –

0

已解決!去抖是我需要的功能。 這是我的代碼,如果有人在相同的情況。

max_invoice_number: _.debounce(function() { 

     this.max_invoice_response = []; 

     axios.get('/max_invoice_number/' + this.invoice_number) 
     .then(response => this.max_invoice_response.push({ 
      info: response.data 

     })); 

     Event.$emit('max_invoice_response', this.max_invoice_response); 
    },300),