我正在使用Laravel API。我的网络应用程序正在向我的API发出GET
请求。但是因为API设置为子域(http://api.geladaris.dev/v1/books
),所以我必须使用JSONP
来使Cross-Origin GET
请求对此端点起作用。
在客户端,我有一个polymer
element,它会生成GET
请求,服务器应该返回Laravel的jsonp
响应。
Laravel文档here指出,setCallback
方法将被链接到这样的响应:
return response()
->json(['name' => 'Abigail', 'state' => 'CA'])
->setCallback($request->input('callback'));
这就是我index
上的Api\BooksController
方法:
public function index()
{
return response()
->json(['name' => 'Abigail', 'state' => 'CA'])
->setCallback($request->input('callback'));
}
我的Routes.php
Route::group(['domain' => 'api.geladaris.dev'], function () {
Route::group(['prefix' => 'v1'], function () {
Route::resource('books', 'Api\BooksController');
});
});
不幸的是,我得到的只是500 Internal Server Error
,当生成请求并且服务器返回上面的代码时,使用“setCallback”方法:
如果我使用setCallback
方法,则只会发生这种情况。如果我省略它,并返回正常json
响应而不是jsonp
,则会找到该文件,但在访问其他API时,我得不到parseResponse
,f.e。 http://api.github.com/users或http://jsonplaceholder.typicode.com/posts。注意第一行:
我不知道如何从这里开始。我已禁用CSRF
中间件并在没有任何中间件的情况下运行我的路由。
我也尝试使用api
中间件,没有任何积极的结果。
我的下一个方法是安装CORS
库并尝试设置正确的响应标头,但我怀疑是否会在那里找到问题,因为我检查并比较了来自三个不同API的标头(Google新闻) ,Github,Json占位符)我的API和我发现的唯一重大差异是在实际返回的JSON之前缺少parseResponse
。
因此我想知道:如何在Laravel中设置JSONP
响应并且不返回500 Server错误?
由于错误表示服务器错误,此处有一些服务器详细信息:
我正在使用WAMP。
我的vhost
:
<VirtualHost *:80>
DocumentRoot "d:/wamp/www/geladaris/public"
ServerName geladaris.dev
ServerAlias *.geladaris.dev
</VirtualHost>
我的hosts
文件:
127.0.0.1 geladaris.dev
127.0.0.1 api.geladaris.dev
答案 0 :(得分:1)
原来那个
return response()
->json(['name' => 'Abigail', 'state' => 'CA'])
->setCallback($request->input('callback'));
只需要通过索引方法来执行请求:
public function index(Request $request)
{
return response()
->json(['name' => 'Abigail', 'state' => 'CA'])
->setCallback($request->input('callback'));
}