2015-11-16 5 views
0

Я создал простой HTML-документ с JS-файлом для проверки вызова AJAX, и я знаю, что запрос XHR отправляется успешно, но в ответе нет ничего. В консоли я вижу, что атрибут template не имеет никакого отношения, связанные с ним в post запроса к серверу, но я не могу понять, почему ...AJAX не работает в Laravel 5.1

Мастер HTML:

<!DOCTYPE> 
<html> 
<head> 
    <script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.3/jquery.min.js"></script> 
    <script src="{!! asset('/js/main.js') !!}"></script> 
</head> 
<body> 
    @yield('content') 
</body> 
</html> 

страницу HTML:

@extends('layouts.master') 

@section('content') 

<p>Make a new email to send out:</p> 

{!! Form::token() !!} 

<textarea id='template' style="resize:none;width:500px;height:100px;"></textarea> 

<button id='addContacts'>Add Contacts</button> 

<span id='loading' style='display:none;'>Loading...</span> 

<div id='results'></div> 

@endsection 

JS файл (пробовал как type и method в запросе, но я использую JQuery 2.1.3, так как будет работать):

$(document).ready(function(){ 

// return the list of input fields for this template 
$('#addContacts').click(function(){ 
    $.ajax({ 
     method: 'post', 
     url: 'http://newco.dev/addContacts', 
     data: 
     { 
      'template' : $('#template').val(), 
      '_token' : $('input[name=_token]').val() 
     }, 
     error: function() 
     { 
      alert('Something went wrong.'); 
     }, 
     beforeSend: function() { 
      $('#loading').show(); 
     }, 
     success: function(response) { 
      $('#loading').hide(); 
      $('#results').html(response); 
     } 
    }); 
}); 

}); // end doc ready 

Маршруты:

Route::post('/addContacts', 'Act[email protected]'); 

контроллер (да, use App\Http\Requests; входит в стоимость номера):

public function returnFields(Request $request) 
{ 
    sleep(2); 
    return $request->template; 
} 

Когда представлено, #loading DIV отображается в течение 2 секунд, как и следовало ожидать, но тогда ничего не возвращается. ..

В инструментах dev (в Chrome) после нажатия кнопки:

Remote Address:192.168.10.10:80 
Request URL:http://newco.dev/addContacts 
Request Method:POST 
Status Code:200 OK 

FORM DATA: 
template: 
_token:AuOTiLSg3rKYtLDIH1abzsQHsLv0fzswgXIfzE8h 

Ничего не зафиксировано в журналах Laravel; Я предполагаю, что это не ошибка 500.

Любые идеи? Я использую Laravel каждый день как разработчик API, поэтому я очень хорошо знаком с его концепциями, но я не лучший разработчик JS (хотя у меня определенно есть опыт работы с ним), так что, возможно, я просто пропустил что-то очевидное. Если вам нужно больше данных, просто спросите.

Спасибо!

+0

У вас возникли ошибки в консоли? –

+0

Ничего ... Только сообщение об успешности на вкладке «Сеть» из ответа, указанного в вопросе. Ничего на вкладке «Консоль» или в самой консоли. Когда я вызываю элементы в DOM с консоли, они возвращаются правильно, что еще более запутанно. – dbadness

+0

В вашем контроллере вы просто хотите спать и вернуть $ template. Какова цель этого? –

ответ

0

Итак, попробовав миллион вещей и поговорив с тоннами людей, я сменил название атрибут на странице email вместо template и все работает красиво. Я не уверен, почему слово «шаблон» вызовет проблему, но, похоже, это так.

0

Вы должны show свой DIV, что вы скрыть

т.е. изменение $('#loading').hide(); в $('#loading').show();

Только тогда вы можете в состоянии увидеть выход, который вы получили

success: function(response) { 
      $('#loading').show(); 
      $('#results').html(response); 
     } 

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

+0

div '# loading 'только для того, чтобы показать, что вызов AJAX успешно подключается к серверу ... Он не получает никаких данных, переданных в него. '# results' всегда отображается, где находится« ответ ». – dbadness

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