我在本地环境中创建了一个Laravel应用,它运行良好。当我将它部署到VPS服务器时,出于某种原因在线访问它,我的AJAX停止工作。这是一个非常简单的AJAX函数的示例,该函数在本地可用,但在我的服务器上不起作用。
The view:
<html>
<head>
<title>Ajax Example</title>
<meta name="csrf-token" content="{{ csrf_token() }}">
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.3/jquery.min.js">
</script>
<script>
function getMessage() {
$.ajax({
headers: {
'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content')
},
type: 'GET',
url: '/getmsg',
data: {
greeting: 'Hello'
},
success: function (data) {
$("#msg").html(data.msg);
}
});
}
</script>
</head>
<body>
<div id='msg'>This message will be replaced using Ajax.
Click the button to replace the message.
</div>
<?php
echo Form::button('Replace Message', ['onClick' => 'getMessage()']);
?>
</body>
</html>
The controller:
class TestAjaxController extends Controller {
public function index(Request $request) {
return response()->json(array('msg'=> $request->greeting), 200);
}
}
The route:
//Test routes
Route::get('ajax-test',function() {
return view('ajax-test');
});
Route::get('/getmsg','TestAjaxController@index');
此功能的全部作用是,通过单击按钮将其发送给控制器的已定义变量,然后控制器向视图返回带有相同消息的响应,然后Jquery将文本更改为消息。
问题是,当按下按钮时,没有数据被传递给控制器,因此控制器返回空数组。
注意:我的本地环境使用Apache(XAMPP),但是我的VPS使用NGINX。虽然我怀疑这是这里的问题。
我完全迷失在可能出了问题的地方。也许我的VPS安装中缺少某些PHP模块或类似的模块?
您实际上正在访问表单字段。直接来自文档
Retrieving Input Via Dynamic Properties
您还可以使用Illuminate \ Http \ Request实例上的动态属性访问用户输入。例如,如果您的应用程序表单之一包含name字段,则可以像这样访问该字段的值:
$name = $request->name;
使用动态属性时,Laravel首先会在请求有效负载中查找参数的值。如果不存在,Laravel将在路线参数中搜索该字段。
因此,请尝试使用$request->query('name')
,例如TestAjaxController
应该是
class TestAjaxController extends Controller {
public function index(Request $request) {
return response()->json(array('msg'=> $request->query('greeting')), 200);
}
}
我没有测试,但是应该可以。希望这会对您有所帮助:)