【问题标题】:ionic laravel XMLHttpRequest cannot load离子 laravel XMLHttpRequest 无法加载
【发布时间】:2016-06-06 11:08:41
【问题描述】:
我是新手,我正在尝试登录并获取令牌,以便 ionic 和 laravel 可以通信。我在 laravel 上使用 satellizer 和 jwt。在邮递员上,我取回了令牌:
这就是我从 ionic 登录的内容:
[在此处输入图片描述][2]
错误提示:
XMLHttpRequest 无法加载 http://localhost:8000/api/authenticate。对预检请求的响应未通过访问控制检查:请求的资源上不存在“Access-Control-Allow-Origin”标头。 Origin 'http://localhost:8100' 因此不允许访问。
是的,在我的 laravel 方面,我已经包含了
header("Access-Control-Allow-Origin: *");
我错过了什么,谢谢
【问题讨论】:
标签:
angularjs
laravel
ionic-framework
token
satellizer
【解决方案1】:
造成这种情况的原因有很多。该错误可能会发生,因为您没有访问标头,并且浏览器获取了此标头并阻止了您的请求。
当您的服务器遇到内部错误(例如 500,403,401 等)时也会发生这种情况。您可能在 laravel 应用程序中的请求生命周期中添加了标头(例如在中间件中过滤所有 api 请求),但有时会出现错误 500 甚至echo 或 dd() 会中断整个请求生命周期并返回浏览器无法通过 ajax 调用解释的错误,因此它会丢失您隐式添加的标头,因此浏览器会返回到预检请求错误..
我建议的唯一解决方案是在代码中正确处理错误并在响应中返回错误并以 json 格式返回。
public function someController extends Controller{
public function Foo(Request $request){
$input_bag = [
'some input' => first_$input,
'another important input' => $second_input,
];
$i = 0;
foreach ($input_bag as $key => $value) {
$value = trim($value);
if (empty($value)) {
$error_bag[$i] = "$key empty";
$i++;
} else {
//
}
}
//filter of false or null values
if (array_filter($error_bag)) {
return response()->json($error_bag, 400);
}
}
这会在运行代码时返回错误的 json 响应。充分利用 try catch 并返回适当的响应可以让您的调试工作变得轻松。