2015-10-22 13 views
6

Próbuję przekazać tablicę objs do funkcji kontrolera Laravel przy użyciu ajax. Nie otrzymuję żadnych danych po poście.Przekazywanie tablicy JavaScript z widoku do kontrolera Laravel

<script> 

     var itemCount = 0; 
     var objs=[]; 
     $(document).ready(function(){ 


      var temp_objs=[]; 

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

       var html = ""; 

       var obj = { 
        "ROW_ID": itemCount, 
        "STREET_ADDRESS": $("#street_address").val(), 
        "CITY": $("#city").val(), 
        "ZIP": $("#zip").val() 
       } 

       // add object 
       objs.push(JSON.stringify(obj)); 

       itemCount++; 
       // dynamically create rows in the table 
       html = "<tr id='tr" + itemCount + "'><td>" + obj['STREET_ADDRESS'] + "</td> <td>" + obj['CITY'] + " </td> <td>" + obj['ZIP'] + " </td><td><input type='button' id='" + itemCount + "' value='remove'></td> </tr>"; 

       //add to the table 
       $("#multiple_table").append(html) 

       // The remove button click 
       $("#" + itemCount).click(function() { 
        var buttonId = $(this).attr("id"); 
        //write the logic for removing from the array 
        $("#tr" + buttonId).remove(); 
       }); 

      }); 

      $("#submit").click(function() { 
       $.ajax({ 
        url:'/app/Http/Controllers/Search/search_address', 
        type: 'POST', 
        dataType:'json', 
        contentType: 'application/json', 

        data: objs 
       }); 

      }); 

     }); 



    </script> 

W mojej funkcji regulatora jest jak ten

public function search_address(){ 
    $data = json_decode($_POST['data'], true); 
    print_r($data); 
} 

myślę, że mam problem z adresem URL w Ajax i nie jestem pewien, jak url kontrolera jest uzyskane.

Dziękuję

+0

Sprawdź kartę sieci w narzędziach programistycznych .. – Rayon

+0

załadowałeś swój ajax? Czy sprawdziłeś konsolę przeglądarki, aby zobaczyć, czy są jakieś błędy? – Vishal

+0

Zapomnij o JavaScript/AJAX na chwilę ... Czy możesz zbudować formularz w HTML/PHP/Laravel, który robi to, co chcesz? Chcę się upewnić, że twój kontroler i routing działają jako pierwsze. –

Odpowiedz

0

można zmienić:

$data = json_decode($_POST['data'], true); 

do:

$data = json_decode(Input::get('data')); 

i upewnij się, że: use Input; powyżej twój class extends Controller

sprawdzić, czy to działa.

Edytuj: Upewnij się także, że trasy (w folderze Controller) są poprawne.

+0

'Input :: post' ??? – Rayon

+0

Nie, 'Input :: get', obecnie pracuję nad projektem z Laravel, tak to robimy. – Maarten

+0

W porządku! Każdy powód, dla którego '$ _POST' nie działa? – Rayon

0

Należy console.log() JavaScript umieszczając następujące w ty ajax postu:

error : function(e){ 
    console.log(e); 
} 

Następnie można zobaczyć, jakie błędy są coraz w panelu deweloperzy narzędzi przeglądarek.

Należy również pamiętać, że posty Laravel wymagają csrf token, chyba że wyraźnie je wyłączyłeś, co oznacza, że ​​będziesz musiał dodać token również do swojego posta. Więc należy skończyć z:

$("#submit").on('click', function() { 
    $.ajax({ 
     url:'/app/Http/Controllers/Search/search_address', // Is this what you meant, is this the route you set up? 
     type: 'POST', 
     data: {'data': objs, '_token' : '<?=csrf_token()?>'}, 
     success : function(data){ 
      // Do what you want with your data on success 
     }, 
     error : function(e){ 
      console.log(e); 
     } 
    }); 
}); 

Zauważ, że mam wbudowanego php wewnątrz JavaScript, który jest tylko do zilustrowania punkt. Idealnie javascript jest przechowywany w jego własnych plikach, więc musiałbyś znaleźć sposób na przekazanie tego tokena. Osobiście korzystam knockoutjs dla tego typu rzeczy (AngularJS jest również popularny), ale łatwo można zrobić coś takiego:

<input type="hidden" id="_token" value="{{ csrf_token() }}" /> 

w HTML, a następnie pociągnąć tę wartość od wewnątrz ajax żądanie:

data: {'data': objs, '_token' : $('#_token').val()} 

EDIT

właśnie zauważyłem url, wygląda na to próbujesz uzyskać dostęp do kontrolera bezpośrednio. Musisz skonfigurować trasę w pliku routes.php, takich jak:

Route::post('/searchAddress', '[email protected]_address'); 

Następnie użyj:

url: /searchAddress 

na żądanie AJAX.

+0

Próbowałem twojej sugestii i nadal nie działa. Jakieś inne rzeczy, o których muszę wiedzieć? –

+0

Jaki efekt dostałeś w przeglądarce javascript console? Czy sprawdziłeś również swoje dzienniki, aby sprawdzić, czy nie zostały zgłoszone jakieś błędy? –

Powiązane problemy