【问题标题】:Laravel ajax return whole HTML page instead dataLaravel ajax 返回整个 HTML 页面而不是数据
【发布时间】:2021-06-02 02:18:15
【问题描述】:

我在处理 ajax 请求时遇到了这个问题。此代码适用于其他页面,仅此不起作用。

我想在 "show" 页面上从控制器 ClientController - (http://.../client/35) 调用 ajax(来自不同的控制器 - CalendarController)可能是错误的 p>

Client.js

$(document).ready(function() {
    $('#events-list').on('click', '.event-popup', function () { 
        var getEventId = $(this).data('id'); //this line is okay, return dynamic id as i want
        $.ajax({
            type: "GET",
            url: "getEvent/" + getEventId,
            headers: {'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content')},
            dataType: 'json',                      
        })
        .done(function (data) {
            console.log(data); //if i remove dataType: 'json' whole page will print in log instead data
        })
        .fail(function(data,jqXHR, textStatus, errorThrown) { 
            toastr.error("error");
            console.log(data,jqXHR, textStatus, errorThrown);
        })
    });
});

来自 ajax 的错误消息

parsererror" SyntaxError: Unexpected token < in JSON at position
...
responseText: "<!DOCTYPE html><html lang="sr"><head>... - WHOLE PAGE

web.php

Route::get('/getEvent/{id}', 'CalendarController@getEventData');

日历控制器

public function getEventData($id)
{
  $event = Event::findOrFail($id);
  return Response::json($event);
}

我添加了如何使Controller看起来但不返回数据,这个ajax调用没有到达控制器

我认为问题出在 URL 的某个地方,或者因为我想用另一个控制器向 show 页面添加数据,但我不知道

提前致谢

编辑 Ajax 请求由于某种原因被重定向

【问题讨论】:

  • 您很可能返回 HTML,但 return Response::json 期望数据为 JSON。
  • 返回的html页面内容是什么?您的 ajax 请求是否可能被重定向到身份验证页面?
  • @RobertRocha 我添加了如何让控制器看起来但不返回数据,这个 ajax 调用没有到达控制器,错误在控制器之前
  • @JamesClarkDeveloper 是的,我没看,错误返回主页而不是我想调用 ajax 的客户端页面
  • 检查网络选项卡以查看错误所在。

标签: ajax laravel routes


【解决方案1】:

使用find() 方法代替findOrFail()(如果对象不存在则返回HTML)。然后你可以检查对象是否存在,并根据条件返回json。

例子:

public function getEventData($id)
{
  $event = Event::find($id);
  if(!$event) {
     return response()->json([
        'success' => false,
        'message' => 'Not Found'
     ], 404);
  }
  return response()->json($event);
}

【讨论】:

  • 正如我所说,我添加了如何让Controller看起来但不返回数据,这个ajax调用没有到达控制器,错误在控制器之前。 Ajax 被重定向并返回整个主页错误,而不是我要调用 ajax 的客户端页面
  • 您是否尝试在url: "getEvent/" + getEventId, 中的网址前添加/。喜欢url: "/getEvent/" + getEventId,
  • 当然,我尝试了多种方法。我用网络标签中的图片编辑了帖子
  • 在您的标头请求中添加:Accept: 'application/json',然后您将看到实际出了什么问题。 Laravel 正在重定向您,可能是身份验证或验证问题,请检查它们
猜你喜欢
  • 2013-11-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-03-25
  • 2013-07-19
  • 1970-01-01
  • 2015-09-21
  • 2014-10-10
相关资源
最近更新 更多