2016-06-08 1 views
0

내가 원하는 것은 페이지 코드없이 변수를 갱신해야하는 티켓 코드로 양식을 제출할 때입니다. 이제는 페이지 새로 고침없이 양식 만 제출하면됩니다. 양식을 제출 한 다음 수동으로 페이지를 새로 고치면 변수가 변경되지만 다시 동일한 양식을 제출할 수 있습니다. 그래서 나는 그것을 막고 싶다. 이것은 내 양식입니다 :양식을 제출할 때 세션 변수를 업데이트하십시오. AJAX. Laravel

<form id="ticket" action="prekiu-uzsakymas" method="get"> 
         <input type="text" name="ticket"> 
         <input id="btnSubmit" type="submit" value="Panaudoti kuponą"> 
        </form> 

Form가 내 AJAX :

foreach ($products as &$item) { 
        $item['price'] = $item['price'] - ($item['price'] * ($ticket->discount/100)); 
       } 

       Session::put('cart', $products); 

그것은 모든 :

$(document).ready(function(){ 

      $('#ticket').on('submit',function(e){ 
       $.ajaxSetup({ 
        headers: { 
         'X-CSRF-Token': $('meta[name="csrf_token"]').attr('content') 
        } 
       }); 
       e.preventDefault(e); 


       $.ajax({ 

        method:"GET", 
        url: $("#ticket").attr("action"), 
        data:$(this).serialize(), 
        dataType: 'html', 
        success: function(data) { 
         var statusHTML = '<h4><span class="label label-success">' + 
           '<i style="color: white" class="glyphicon glyphicon-ok"></i> Ticket used successfuly.</span></h4><br>'; 

         $("#ticket").replaceWith(statusHTML); 
        }, 
        error:function(data){ 
         console.log("request failed"); 
        } 
       }) 

      }); 

     }); 

이것은 내가 페이지를 새로 고침 양식을 제출할 때 실행되는 것입니다 작동하지만 사용자가 페이지를 새로 고치지 않고 값을 업데이트하는 방법을 모르겠습니다. n 두 번째 양식을보고 제출할 수 없습니다.

+0

할 수 없습니다. 적어도 세션은 있습니다. u가 무엇을 필요로하는지 설명하면, 나는 그것을 성취 할 수있는 올바른 방법을 제안 할 수 있습니다. – GONG

+0

양식을 제출할 때 페이지를 새로 고치지 않고 표시되는 가격을 업데이트하고 싶습니다. –

+0

그러면'$ ('# price') .text();'처럼 업데이트해야합니다. 만약 당신이 제품의 배열과 함께 할 필요가 u는 모든 데이터를 지우고 그것을 repopulate, 기능을 만들 필요가 있습니다. AngularJs와 같은 것을 사용하면 훨씬 쉽습니다. – GONG

답변

1

양식을 세션 변수 검사로 감습니다.

form

@if (!request()->session()->get('ticket')) 
     <form id="ticket" action="prekiu-uzsakymas" method="POST"> 
      <input type="text" name="ticket"> 
      <input id="btnSubmit" type="submit" value="Panaudoti kuponą"> 
     </form> 
    @else 
     <h4> 
      <span class="label label-success"> 
       <i style="color: white" class="glyphicon glyphicon-ok"></i> Ticket used successfully. 
      </span> 
     </h4> 
     <br> 
    @endif 

이 할인 티켓이 세션에 저장되어있는 경우 표시되는 양식을 방지 할 수 있습니다.

그런 다음 장바구니 내용과 함께 코드에서이 설정 :

// Check for ticket being sent in request, then check the session to make sure it's not set 
    if (request()->input('ticket') && (!request()->session()->get('ticket'))) { 

     foreach ($products as &$item) { 
      $item['price'] = $item['price'] - ($item['price'] * ($ticket->discount/100)); 
     } 

     Session::put('cart', $products); 
     Session::put('ticket', request()->input('ticket')); 
    } 

    // Return your altered products in your response, 
    // so you can update the info presented to the user 
    return response()->json(['products' => $products]); 

당신의 JavaScript/AJAX에서 :

$(document).ready(function(){ 

     $.ajaxSetup({ 
      headers: { 
       'X-CSRF-Token': $('meta[name="csrf_token"]').attr('content') 
      } 
     }); 

     $('#ticket').on('submit',function(e){ 

      e.preventDefault(); 

      $.ajax({ 

       method: $("#ticket").attr("method"), 
       url: $("#ticket").attr("action"), 
       data:$(this).serialize(), 
       dataType: 'html', 
       success: function(data) { 
        var statusHTML = '<h4><span class="label label-success">' + 
          '<i style="color: white" class="glyphicon glyphicon-ok"></i> Ticket used successfully.</span></h4><br>'; 

        $("#ticket").replaceWith(statusHTML); 

        // data will now contain your products with updated prices 
        // You can access this with: data.products 
        // Example: 
        if (data.products) { 
         $(data.products).each(function(index) { 
          $("#product-"+$(this).id).find(".price").html($(this).price); 
         }); 
        } 
       }, 
       error: function(data){ 
        console.log("request failed"); 
       } 
      }) 

     }); 

    }); 

가 나는 또한 선택 사항입니다 POST, 할 양식 방법을 수정했습니다. 이걸 가지고 가면 routes.php에있는 경로를 Route::post으로 변경해야합니다. 그렇지 않으면 GET을 사용할 수 있습니다.

+1

노력해 주셔서 감사합니다! 지금이 오류가 발생합니다 :'prekiu-uzsakymas : 263 Uncaught TypeError : 속성 '을 읽을 수 없습니다'각각의 '정의되지 않은'이 줄 : dataType :'html ', –

+1

안녕 친구! 나는 상쾌하게했습니다! 내가 가장 필요로했던 것은 상점에서 티켓을 사용한 것입니다! 감사! –

+0

어떻게 든 나를 채팅에 초대 할 수 있습니까? 질문이 하나 더 있습니다. –

관련 문제