2016-07-18 20 views
6

Jak mogę użyć Ajaxa do przekazania zmiennej JavaScript do PHP i pobrania tych zmiennych?Laravel Użycie AJAX do przekazania zmiennej Javascript do PHP i odzyskanie tych

Używam suwaka Jquery Ui i na każdym slajdzie chcę przekazać wartość suwaka javascript do php, aby to powiedzieć.

Nie mam (niezbyt) doświadczenia w Ajaksie i naprawdę doceniam pomoc.

To jest jak moja suwak wygląda:

$("#sliderNumCh").slider({ 
     range: "min", 
     min: 0, 
     max: 20, 
     step: 1, 
     value: numbersOfChapters, 
     change : function(e, slider){ 
      $('#sliderAppendNumCh').empty(); 
      var i = 0; 
      var sliderValue = slider.value; 
      var getSliderVal = document.getElementById('sliderValue').value = sliderValue; 

      $.ajax({ 
       type: 'POST', 
       url: '', 
       headers: {'X-Requested-With': 'XMLHttpRequest'}, 
       data: { 
        value: getSliderVal 
       }, 
       success: function (option) { 
        console.log(getSliderVal); 
       } 
      }); 
      ... 
     } 
    }) 

Mój przykład trasa:

Edit moja droga wygląda to teraz:

Route::post('edit/{productID}', ['as' => 'editProductPost', 'uses' => '[email protected]']); 

Edits co próbowałem:

url: '{{ route("editProductWeb") }}', 

i dostał ten błąd:

POST http://localhost/myApp/public/product/edit/%7BproductID%7D 500 (Internal Server Error) 

i próbowałem to:

url: 'edit', 

i dostał ten błąd:

POST http://localhost/myApp/public/product/edit 500 (Internal Server Error) 

Edit metoda mój kontroler edit:

public function editProduct($productRomID = 0) 
{ 
    $product = ProductRom::find($productID); 
    $sheets = Chapters::where('product_id', '=', $productID)->get(); 

    $productId = $product->id; 

    $sheetCount = count($sheets); 

    return view('product.edit', [ 
     'productId' => $productId, 
     'product' => $product, 
     'sheets' => $sheets, 
     'sheetCount' => $sheetCount, 
     'type' => 'edit', 
     'route' => 'updateProductRom' 
    ]); 
} 

Edit użyciu haakym sugestię do tej pory:

  $.ajax({ 
       type: 'post', 
       url: "{{ Route('editProduct', $product->id) }}", 
       headers: {'X-Requested-With': 'XMLHttpRequest'}, 
       data: { 
        value: getSliderVal, 
        productId : getPrId 
       }, 
       success: function (option) { 
        console.log(getSliderVal); 
       } 
      }); 

zostanie wydrukowany mi id + aktualną wartość suwaka w moim debugowania, dzięki czemu działa do tej pory. Teraz muszę uzyskać tę wartość i użyć go w moim widoku (php) do jakiejkolwiek sugestii, jak postępować?

stosując tę ​​metodę w moim kontrolera:

$sliderValue = $request->input('value'); 

zwraca mi

null

Edycja Próbowałem też tak:

$sliderValue = Input::get('value'); 

który również wrócił mi

null

Edit dodałem log:

Log::info(Input::all()); 

To pokazuje prawidłową wartość suwaka i identyfikator produktu na slajdzie. Ale moja Input::get('value') nadal zwraca mi null

Edycja myślę I należy dodać następujące informacje:

zmieniłem moje trasy to teraz:

Route::get('edit/{productID}', ['as' => 'editProduct', 'uses' => '[email protected]']); 
Route::post('edit/{productID}', ['as' => 'editProductPost', 'uses' => '[email protected]']); 

get przedstawia dane z bazy danych dla konkretnego produktu i pokazuje je moim zdaniem, dodałem post jeden, aby opublikować dane slidervalue do metody editProductPost i zwraca następnie wartość (sliderValue) w edit widzenia, jest to poprawne (Btw nadal nie działa)

EDIT

Jeśli mogę umieścić w moim metody kontrolera:

if ($request->isMethod('post')){ 
    return response()->json(['response' => 'This is post method']); 
} 

return response()->json(['response' => 'This is get method']); 

ciśgle następujący błąd (jeśli slajd):

POST http://localhost/myApp/public/product/edit/54 500 (Internal Server Error)

mam to w głowie:

<meta name="csrf-token" content="{{ csrf_token() }}"> 

i umieścić to przed moim ajax post:

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

EDIT:

Robi to zwraca aktualny poprawną wartość suwak w dziennikach:

Log::info($request->get('value')); 

Próbowałem to :

return view('productRom.edit', [ 
     'value' => $value, 
    ]); 

Ale pojawia się błąd w konsoli:

Failed to load resource: the server responded with a status of 500 (Internal Server Error) http://localhost/myApp/public/product/edit/73

+0

Wydaje się, że to dobrze. Musisz tylko umieścić adres URL swojego kontrolera/metody w parametrze "url" $ .ajax, a następnie powinien on zadziałać – Julqas

+0

ty, więc muszę dodać 'edit' w' url', po którym podążam trasą powyżej w pytanie – utdev

+0

Możesz spróbować adresu URL: '/ edit', jeśli nie działa, wypróbuj pełny adres URL :) – Julqas

Odpowiedz

0

Jak @julqas stwierdzić trzeba podać adres URL w metodzie $.ajax().

jak masz nazwie trasy editProduct można wyjście link za pomocą ostrza:

$.ajax({ 
    type: 'POST', 
    url: '{{ route("editProduct" }}', 
    ... 

Edycja 1:

Trasa jest get i metoda ajax jest post, myślę, że to jest problem. Musisz zrobić to samo.

Jeśli zmienisz trasę na post, musisz dodać token CSRF do żądania ajax, kiedy zostanie wysłany.Istnieją pewne wytyczne dotyczące docs jak to zrobić tutaj:

https://laravel.com/docs/5.2/routing#csrf-x-csrf-token

Docs zalecamy dodanie tego w głowie HTML:

<meta name="csrf-token" content="{{ csrf_token() }}"> 

następnie użyć następującego kodu przed wysłaniem żądania:

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

alternatywnie można dodać go do żądania w wywołaniu ajax.

Edycja 2

Punkt side - Ja tylko zgadywać, co jest błąd, to byłoby lepiej, gdybym poprosił cię, jeśli można go debugować siebie, aby zobaczyć, co się błąd . Nauka debugowania zapytań ajaxowych jest bardzo przydatna i nie jest zbyt trudna.

Najlepszym sposobem na to jest użycie konsoli dewelopera w przeglądarce z wyboru podczas tworzenia żądania ajax. Jeśli używasz przeglądarki Chrome, na przykład otwórz Developer tools, a następnie kliknij kartę Network przed złożeniem zamówienia. Po złożeniu wniosku możesz sprawdzić wniosek i jego szczegóły. Mam nadzieję, że pomaga!

Edycja 3

chciałbym zmienić metodę editProduct() nie ponosi parametr i zamiast uzyskać wartość id dla produktu z żądania

public function editProduct() 
{ 
    // value here is referring to the key "value" in the ajax request 
    $product = ProductRom::find(\Request::get('value'); 
    ... 
} 

rozważyć zmianę klucza w swojej json value do czegoś bardziej użytecznego, na przykład productID

data: { 
    productId: getSliderVal 
} 
+0

Dzięki, ale dostaję ten błąd 'POST http: // localhost/myApp/public/product/edit /% 7BproductID% 7D 500 (błąd wewnętrznego serwera)' – utdev

+0

dziękuję zmieniłem go (trasa do postu, dodano meta csrf i dodano ajax nagłówek przed moim postem ajaxowym), ale pojawia się ten sam błąd – utdev

+0

@ JohnDoe2 sprawdź moje zmiany, daj mi znać, jeśli nie są jasne! – haakym

0

Nie wprowadzono wartości dla "url". Utwórz dowolną trasę, a następnie umieść ją w adresie URL: "{any_route_name}", a następnie sprawdź w konsoli, czy twoja wartość została zaksięgowana, czy nie.

Musisz zrobić kilka R & D na tym poziomie.