【问题标题】:AJAX function always return html code in response on successAJAX 函数总是返回 html 代码以响应成功
【发布时间】:2019-10-06 17:12:41
【问题描述】:

在 laravel 5.8 项目中,我尝试使用 JQuery AJAX 函数向项目路由 url 之一发送 get 请求,响应状态为 200,这意味着请求成功执行,但每次函数返回当前视图 HTML回应

我试图删除我的 php 函数中的所有代码并只返回一个 JSON 响应但仍然得到 HTML 我还尝试将数据类型更改为 JSON 或文本并将缓存设置为 false 但响应仍然相同我什至尝试过评论路由请求的所有功能,并且总是会出现相同的响应 我还尝试了这里或其他网站上提供的许多其他解决方案,但没有办法解决它

这是路由请求的我的控制器功能:

public function seen()
{
    $user = User::find(Auth::user()->id);

    $notifications = $user->notification;
    foreach($notifications as $notification){
        $notification->seen = 1;
        $notification->save();
    }

    return response()->json(['status' => 'seen']);
}

函数路径如下:

Route::get('/seen', 'CustomAuth\AuthController@seen')->middleware('authUser');

最后是 AJAX 函数:

    function seen(){
        let url = '/seen';
        $.ajax({
            type: 'GET',
            url: url,
            success: function (data) {
                console.log(data);
            },
            error: function (data) {
                console.log(data);
            }
        });
    }

我将 contenType 设置为 text 时得到的响应:

我希望我会得到一个我试图在函数中返回的 JSON 响应,但我认为请求没有到达函数并且问题出在 ajax 请求中

【问题讨论】:

  • 尝试添加 echo json_encode($data);在 PHP 和 jquery 中尝试 Datatype:json
  • 我遇到了类似的问题,强制标头(特别是内容类型为 txt)有帮助。
  • 我得到一个包含响应属性的对象{readyState: 4, getResponseHeader: ƒ, getAllResponseHeaders: ƒ, setRequestHeader: ƒ, overrideMimeType: ƒ, …}@NiketJoshi
  • @KareemSaeed 你能打印出响应和请求标头吗?
  • 您也可以尝试返回纯 json 而不是 response()->json();,我很确定有一个辅助函数可以将任何数组转换为 json。

标签: ajax laravel


【解决方案1】:

尝试从您的响应中删除中间件。

【讨论】:

  • 尝试您的功能后仍然收到 HTML 响应。我不认为问题与路由有关,如果它是 web 或 api,因为我以前这样做的方式与我现在添加 web 路由的方式相同,并且运行良好
  • @KareemSaeed 您如何打印屏幕截图中的数据?你只是在做console.log(data)吗?
  • 控制台在AJAX成功函数success: function (data) { console.log(data); }987654321@中记录响应
  • @KareemSaeed 我知道这是一个疯狂的尝试,但你能用“结果”替换“数据”吗? - 是的,我的意思是参数名称。
  • 好的,我将参数更改为“结果”,但仍然没有任何变化
【解决方案2】:

试试这个

function seen(){
    let url = '/seen';   $.ajax({
    url: "getusersallapp",
    type: 'POST',
    dataType: 'json',
    data: {
       '_token': $('input[name=_token]').val()
    },
    }).done(function (data) {
      console.log(result);
    })
    .fail(function (xhr, status, error) {
         console.log(error);
     });

【讨论】:

    【解决方案3】:

    正如 JCode 所建议的,问题出在添加到路由的中间件中。
    就好像中间件中的 case 返回 false 一样,中间件会重定向到当前页面,因此它会在 AJAX 响应中返回页面 HTML 代码

    【讨论】:

    • 我已经编辑了我的答案,所以如果有人偶然发现它知道原因可能是什么。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-11-12
    • 1970-01-01
    • 1970-01-01
    • 2020-07-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多