我正在开发网站,在前端使用AngularJS,在后端使用Laravel-php框架。
我有一个简单的表单,它将$http.post调用发送到laravel后端,然后处理数据并发送电子邮件。
在我的本地Apache服务器上一切都很好,但在网络托管服务器上,它在开发者控制台中返回502(坏的网关错误)(见下面的屏幕截图)。
屏幕截图:http://s32.postimg.org/bwnxyps1x/502.jpg
然而,当这个错误出现时,后台的脚本会被执行并发送电子邮件。这真的很奇怪。
在AngularJS中,我有一个简单的工厂,它正在发送$http.post调用。。。
var sendForm = function sendForm($http) {
return {
sendForm: function($scope) {
return $http({
method: 'POST',
url: '/odeslat',
data: {titul: $scope.form.titul, jmeno: $scope.form.jmeno, prijmeni: $scope.form.prijmeni, email: $scope.form.email,
telefon: $scope.form.telefon, zprava: $scope.form.zprava, human: $scope.form.human}
});
}
}
};
module.exports = sendForm;
这是我的控制器。
var formularCtrl = function formularCtrl($scope, sendForm) {
$scope.form = {};
$scope.form.human = 'Jsem člověk.';
var odeslano = false;
$scope.submitForm = function submitForm(isValid) {
$scope.showErrorMessage = false;
$scope.errorMessage = "";
if((isValid) && (!odeslano))
{
sendForm.sendForm($scope).success(function(data){
if (!data.success) {
// if not successful, bind errors to error variables
$scope.errorMessage = data.message;
$scope.showErrorMessage = true;
} else {
// if successful, bind success message to message
$scope.message = data.message;
$scope.showMessage = true;
odeslano = true;
}
});
}
else
{
$scope.showErrorMessage = true;
$scope.errorMessage = "Doplňte prosím všechny povinné údaje. ";
}
}
};
module.exports = formularCtrl;
最后,这只是laravel控制器中的一个简单方法。
public function sendForm(Request $request) {
$v = Validator::make($request->all(), [
'jmeno' => 'required'
]);
if($v->passes()) {
$input = $request->all();
$this->sendMessage($input);
return response()->json(['success' => true, 'message' => 'Formulář byl odeslán. Jakmile to bude možné, budete kontaktováni.']);
}
elseif($v->fails())
{
$input = $request->all();
return response()->json(['success' => false, 'message' => 'Musíte doplnit povinné údaje']);
}
}
private function sendMessage($input)
{
Mail::send('emails.formular', $input, function($message)
{
$message->from(self::FROM, self::SUBJECT);
$message->to(self::TO);
});
}
我不是AngularJS的专家,我真的被这个错误弄糊涂了。你有什么建议吗?原因是什么?
非常感谢!感谢所有提示。
502表示服务器无法正确完成某些操作。因此,它发送了一封电子邮件,但可能会在脚本之后尝试一些事情,比如更新数据库。由于您的本地工作正常,远程工作部分正常,这归结为一些服务器问题,是否有可能在该服务器上有更多的日志记录,可以告诉我们发布502的原因。也许电子邮件程序在尝试发送电子邮件后会返回此消息?
后端似乎不会向您的angular应用程序发送任何信息。它应该以OK(例如200)HTTP状态进行响应。
好的。所以我已经联系了网络托管提供商,他们关闭了htaccess中的OPcache,现在它正在工作…:)