AJAX在Laravel 5.1中不起作用

时间:2015-11-16 04:01:44

标签: jquery ajax laravel-5.1

我创建了一个带有JS文件的简单HTML文档来测试AJAX调用,我知道XHR请求正在成功提交,但响应中没有任何内容。在控制台中,我看到template属性在post服务器请求中没有与之关联,但我无法找出原因......

掌握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文件(在请求中同时尝试了typemethod,但我使用的是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', 'ActionController@returnFields');

控制器(是的,包括use App\Http\Requests;):

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

提交后,#loading div会按预期显示2秒,但之后不会返回任何内容......

点击按钮后的开发工具(在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开发人员(虽然我肯定有经验)所以也许我只是缺少一些东西明显。如果您需要更多数据,请询问。

谢谢!

2 个答案:

答案 0 :(得分:0)

你应该show你隐藏的div

即,将$('#loading').hide();更改为$('#loading').show();

然后只有你能看到你得到的输出

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

希望这有助于你

答案 1 :(得分:0)

因此,在尝试了一百万件事并与大量人交谈后,我将页面中属性的名称更改为email而不是template,一切都运行得很好。我不确定为什么单词&#34; template&#34;会引起问题,但似乎是这样。