2017-11-25 73 views
0

我在頁面上使用兩個ajax調用: 在頁面的一側,我使用ajax post發佈數據並在數據庫中提交顏色(表名:color_store),另一方面,我嘗試從該表中獲取所有顏色,並通過單擊按鈕將其置於選擇標記中。 但即使提交新顏色,我仍然會收到舊數據。ajax調用後獲取舊數據(get方法)Laravel 5.5

這裏是我的顏色提交表單:

<form method="post" action="/CRM/defineColor" id="colorPickingForm"> 

     <input id="colorName" name="colorName" type="text"> 
     <button type="button" class="btn blue" id="addColor">submit</button> 

    </form> 

這裏是我的ajax到顏色提交到數據庫:

$('#addColor').click(function(){ 
      $.ajaxSetup({ 
       headers: { 
        'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content') 
       } 
      }); 

      var colorName = $('#colorName').val(); 

      $.ajax({ 
       url: "/CRM/defineColor", 
       type:"POST", 
       data:{ colorName: colorName}, 
       success: function(data) { 
         $("#result").empty().append(data) 
        } 
       }) 

這裏是選擇標籤和按鈕顯示數據:

<select class="form-control" id="colorFetch"> 

    </select> 
    <button type="button" class="btn red" id="colorRefresh">Color Update</button> 

這裏是AJAX調用獲取所有的顏色:

$.ajax({ 
       url: "/CRM/fetchColor", 
       type:"get", 
       dataType: "json", 
       cache: false, 
       contentType:"application/json; charset=utf-8", 
       success: function(colorNameReq) { 


        $("#colorRefresh").click(function(){ 

//loop through json object 
         $("#colorFetch").empty(); 
         $.each(colorNameReq, function(key, value) { 


          $('#colorFetch') 
           .append($("<option></option>") 
            .attr({ 
             id:key, 
             value:value 
            }) 
            .text(value)); 

         }); 

        }); 
       } 
      }) 

這裏是我的控制器,得到所有的顏色數據庫:

 protected function fetchColor(){ 


     $colorInfo = new Color_store; 
     $colorInfo = $colorInfo->get(); 
     $count = count($colorInfo); 

     for($i = 0 ; $i < $count; $i++){ 
      $colorName[] = $colorInfo[$i]->colorName ; 
     } 

     $colorName=json_encode($colorName); 

     return $colorName; 
    } 

那麼,爲什麼我收到甚至在將顏色提交到數據庫之後,JSON對象的舊值?我真的不明白,是不是ajax想給我新的數據?

例如: 當我加載頁面並按下「顏色更新」按鈕時,它會顯示我以前提交的兩種顏色(紅色和綠色)。但是當我向數據庫提交新顏色時,讓我們說黃色。按下「顏色更新」按鈕後,它會再次顯示紅色和綠色,但列表中沒有顯示黃色。是不是假設在列表中顯示新的顏色(紅色,綠色和黃色)?

任何幫助,將不勝感激!

+0

@Sahand Khodaparast –

+0

您的JavaScript的第二塊創建一個Ajax請求(大概在頁面加載)。如果你想在點擊按鈕時發出新的請求,那麼ajax調用應該在點擊處理程序中完成,而不是像你現在所做的那樣。 – Steve

+0

@Steve哦!謝謝你,你其實是對的。 **我還有一個問題**,我怎樣才能設置間隔計時器到該Ajax調用,以便每2秒加載顏色表的內容,並且不要一遍又一遍地重複顏色?我想只更新列表。 –

回答

1

您的顏色加載AJAX調用似乎不正確。它應該如下:

$("#colorRefresh").click(function(){ 
     $.ajax({ 
       url: "/CRM/fetchColor", 
       type:"get", 
       dataType: "json", 
       cache: false, 
       contentType:"application/json; charset=utf-8", 
       success: function(colorNameReq) { 

        //loop through json object 
         $("#colorFetch").empty(); 
         $.each(colorNameReq, function(key, value) { 


          $('#colorFetch') 
           .append($("<option></option>") 
            .attr({ 
             id:key, 
             value:value 
            }) 
            .text(value)); 

         }); 
       } 
     }); 
    }); 

並確保您添加的新顏色是否已成功寫入數據庫。

此外,您可以使用設置間隔函數來檢查給定時間間隔內的顏色更新。這將是這樣的:

setInterval(function(){ 
$.ajax({ 
        url: "/CRM/fetchColor", 
        type:"get", 
        dataType: "json", 
        cache: false, 
        contentType:"application/json; charset=utf-8", 
        success: function(colorNameReq) { 

         //loop through json object 
          $("#colorFetch").empty(); 
          $.each(colorNameReq, function(key, value) { 


           $('#colorFetch') 
            .append($("<option></option>") 
             .attr({ 
              id:key, 
              value:value 
             }) 
             .text(value)); 

          }); 
        } 
      }); 
}, 2000); //This would check and update in every 2 seconds.