【问题标题】:Laravel API - JSONP response returns 500 Internal Server ErrorLaravel API - JSONP 响应返回 500 内部服务器错误
【发布时间】:2016-06-26 04:20:18
【问题描述】:

我正在开发 Laravel API。我的 Web 应用程序正在向我的 API 发出 GET 请求。但由于 API 设置为子域 (http://api.geladaris.dev/v1/books),我必须使用 JSONP 使跨域 GET 请求工作到此端点。

在客户端,我有一个 polymer element,它生成 GET 请求,服务器应该返回 Laravel 的 jsonp 响应。

Laravel 文档 here 指出,setCallback 方法将像这样链接到响应:

 return response()
        ->json(['name' => 'Abigail', 'state' => 'CA'])
        ->setCallback($request->input('callback'));

这就是我的Api\BooksController 上的index 方法的样子:

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,则找到该文件,但我没有得到parseResponse,当访问另一个API 时,f.e. http://api.github.com/usershttp://jsonplaceholder.typicode.com/posts。注意第一行:

我不知道如何从这里开始。我已禁用 CSRF 中间件并在没有任何中间件的情况下运行我的路线。

我也尝试使用 api 中间件,但没有任何积极的结果。

我的下一个方法是安装一个CORS 库并尝试设置正确的响应标头,但我怀疑问题会在那里找到,因为我检查并比较了来自三个不同 API(Google 新闻、Github)的标头, Json Placeholder) 到我的 API,我发现的唯一实质性区别是在实际返回的 JSON 之前缺少 parseResponse

因此我想知道:如何在 Laravel 中设置 JSONP 响应而不返回 500 服务器错误?


由于错误指示服务器错误,这里向服务器提供一些详细信息:

我正在使用 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

【问题讨论】:

  • 您可能应该查看服务器的错误日志。此外,您可以轻松地将 CORS 配置为 JSONP 的替代方案。

标签: php json ajax api laravel


【解决方案1】:

原来是这样的

return response()
    ->json(['name' => 'Abigail', 'state' => 'CA'])
    ->setCallback($request->input('callback'));

只要求请求通过 index 方法,如下所示:

public function index(Request $request)
{
return response()
    ->json(['name' => 'Abigail', 'state' => 'CA'])
    ->setCallback($request->input('callback'));
}

【讨论】:

    猜你喜欢
    • 2012-05-05
    • 2016-09-16
    • 1970-01-01
    • 1970-01-01
    • 2016-06-19
    • 2019-11-12
    • 2020-10-13
    • 2018-09-30
    • 2021-03-25
    相关资源
    最近更新 更多