簡體   English   中英

Ajax 請求在 Laravel 中不斷返回錯誤函數

[英]Ajax request keeps returning error function in Laravel

伙計們,美好的一天。 在我的 Laravel 應用程序中,我試圖檢查我的表中是否存在特定日期、科目、年級的出勤率。 如果是這樣,我有一個if statement設置來根據返回的內容顯示所需的結果。

我正在使用 ajax 發出請求,但似乎 ajax 一直在運行錯誤函數,而且我似乎沒有收到任何錯誤代碼或internal server error(500, 404, 403, etc)在我的控制台中,狀態返回是200 ok

這是我的腳本:

$(document).on('change', '#subject', function(event) {
  event.preventDefault();
  /* Act on the event */

  var subject = $('#subject').val();
  var grade = $('#grade').val();
  var date = $('#date').val();

  if (subject != "" && grade != "") {
    $.ajax({
      url:"/attendence/students",
      method:"GET",
      data:{"subject_id":subject, "grade_id":grade, "date":date},
      dataType:"json",
      success:function(data){
        $("#result").html(data);
      },
      error:function(){
        $("#result").html('There was an error please contact administrator');
      }
    });
  }
});

這是請求發送到的控制器:

 public function students(Request $request)
{
    //
    $grade = Grade::findOrFail($request->grade_id);

    $subject = Subject::findOrFail($request->subject_id);

    $students = Student::where('grade_id', $grade->id)->get(['id', 'first_name','middle_name', 'surname', 'grade_id']);

    $statuses = Attendence::statuses();

    // this check if attendence has been setup for the given date.
    // if so prevent user for enter another date
    $attendenceExists = Attendence::where([
        'grade_id' => $grade->id, 
        'subject_id' => $subject->id, 
        'date' => $request->date
    ])->first();


    if ($attendenceExists) {
        return response()->json('A recorded attendence already exists for the seleced grade and subject!');
    } 
    else {
        return \View::make('attendence.partials.attendence-form')->with(array(
            'students' => $students,
            'subject' => $subject,
            'date' => $request->date,
            'statuses' => $statuses
        ));
    }

}

現在,如果此代碼返回 true:

// this check if attendence has been setup for the given date.
    // if so prevent user for enter another date
    $attendenceExists = Attendence::where([
        'grade_id' => $grade->id, 
        'subject_id' => $subject->id, 
        'date' => $request->date
    ])->first();

   if ($attendenceExists) {
        return response()->json('A recorded attendence already exists for the seleced grade and subject!');
    } 

這里的條件運行並返回正確的結果。 但是我上面的else statement確實運行了,但我沒有得到正確的結果。 這是我得到的結果:

有錯誤請聯系管理員

這表明正在運行的是 ajax 請求的這一部分:

error:function(){
   $("#result").html('There was an error please contact administrator');
}

令人驚訝的是,當我檢查控制台時,我看到的是:

在此處輸入圖片說明

這正是我想要的,但 ajax 否則返回。 我做錯了什么嗎?

當您返回html時,您的dataType設置為json 將其更改為html

$.ajax({
      url:"/attendence/students",
      method:"GET",
      data:{"subject_id":subject, "grade_id":grade, "date":date},
      dataType:"json",
      statusCode: {
            200: function(data) {
                $("#result").html(data.responseText);
            };
       }
      }
    });

試試這個。 我希望這會幫助你

我會說根本不要設置數據類型。 只需完全刪除該設置,讓 jQuery ajax() 方法為您自動檢測它。 這樣,如果響應類型是 JSON,它就會起作用。 如果響應類型是 HTML,它也可以工作。 👍🏻

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM