2016-04-30 6 views
3

Я пытаюсь использовать ajax для возврата данных из базы данных при нажатии кнопки. Прямо сейчас, когда я нажимаю кнопку, пустая страница перезагружается. Я не знаю, почему это происходит или как я могу это исправить.ajax в laravel перезагружает пустую страницу

Вот код на мой взгляд:

<form action="test" method="post" id="testForm"> 
    <input name="input1" type="form"> </input> <br> 
    <input name="input2" type="form"> </input> <br> 
    <button type="submit" class="sbutton"> Submit </button> 
</form> 

Javascript код также в связи между тегами сценария, (я не знаю, хорошая практика, переедет в отдельный файл позже).

$('#testForm').submit(function(e){ 
    var rawElement = this; 
    e.preventDefault(); 
    var formData = $(this).serialize(); 
    $.post('test', formData).done(function(response){ 
     console.log(response); 
    }); 
}); 

Вот код в мой контроллер:

public function getValues() 
{ 
    $input1= $_POST["input1"]; 
    $input2= $_POST["input2"]; 
    try{ 
     DB::table("table")->insert(
      array("value1" => $input1, "value2" => $input2) 
    ); 
    } catch (\Exception $e) { 
     echo "something went wrong"; 
    } 
    $object = new \App\testClass($userID); // $object is a custom object 
    return $userObject; 
} 

код в моих маршрутах файлов:

Route:: post("test", 
["as" => "test", 
"uses" => "[email protected]"]); 

Route::get("test", "[email protected]"); // This just returns the page 

Так прямо сейчас функция контроллер возвращает пустую страницу с объектом. Я пытаюсь использовать ajax в laravel, чтобы заставить функцию контроллера просто передать объект на текущую страницу без перезагрузки страницы.

ответ

1

Решения было поместить форму внутри тела тега и изменение поля ввода имеет тип текст. Ниже представлен файл с исправленным кодом

<body> 
<form action="test" method="post" id="testForm"> 
<input name="input1" type="text"> </input> <br> 
<input name="input2" type="text"> </input> <br> 
<button type="submit" class="sbutton"> Submit </button> 
</form> 


<script> 

$('#testForm').submit(function(e){ 
    e.preventDefault(); 
    var formData = $(this).serialize(); //Get the form data and put in a structure i can send 
    $.post('test', formData).done(function(response){ 
     console.log(response); 
    }); 
}); 
</script> 
</body> 
0

Чтобы получить доступ к любым данным POST, вам необходимо использовать слой Request.

public function getValues(Request $request) 
{ 
    $input = $request->input(); 

    $input1= $input["input1"]; 
    $input2= $input["input2"];. 

    try { 
     DB::table("table")->insert(
      array("value1" => $input1, "value2" => $input2) 
     ); 

    } catch (\Exception $e) { 
     dd("something went wrong"); 
    } 

    $object = new \App\testClass($userID); // $object is a custom object 
    return $object; 
} 
+0

Мое понимание состоит в том, что $ _POST ["input1"]; это то же самое, может быть, не самая лучшая практика, но функциональна. – ray

+0

Этот ответ, вероятно, прав, возможно, возвращает ответ json в контроллере –

+0

попробовал это так же, как и раньше – ray

0

Здесь мы идем:

var data = $("#testForm").serialize(); 
      $.ajax({ 
       type: "POST", 
       url: "/yourURL", 
       data: data, 
       dataType: 'html', 
       success: function (result) { 

        alert("Your message sent!"); 
       } 
      }); 

Надеется, что это помогает;)

+0

попробовал это, но тот же результат, проблема может быть в файлах маршрутов. Я отредактирую свой пост с ними за несколько минут – ray

Смежные вопросы