Laravel API - JSONP响应返回500内部服务器错误

时间:2016-03-11 03:01:06

标签: php json ajax api laravel

我正在使用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”方法:

500 Internal Server Error

如果我使用setCallback方法,则只会发生这种情况。如果我省略它,并返回正常json响应而不是jsonp,则会找到该文件,但在访问其他API时,我得不到parseResponse,f.e。 http://api.github.com/usershttp://jsonplaceholder.typicode.com/posts。注意第一行:

parseResponse in front of json

我不知道如何从这里开始。我已禁用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

1 个答案:

答案 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'));
}