skip to Main Content

first let me share some code:

View / Form:

 <form id="xlsForm" enctype="multipart/form-data">
            @csrf
            <input class="btn btn-primary" id="loadFile" type="file" name="excelfile" accept=".xls,.xlsx,.docx,.doc" required/>
            <input type ="hidden" name="load" value="0">
            <button  class="btn btn-light" name ="loadSubmit" id="loadSubmit" type="submit" value ="Analyze">Analyze</button>
        </form

JQuery

 $('#xlsForm').submit(function uploadFile(event) {
        event.preventDefault();
        $.ajaxSetup({
            headers: {
                'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content'),
            }
        });

        $('#loader').show();
        $.ajax({
            url: "{{route('ExcelToArray')}}",
            method: 'POST',
            data: new FormData(this),
            dataType: 'JSON',
            contentType: false,
            cache: false,
            processData: false,
            success: function (response) {
                console.log("entered response")
                $("#inner").empty();
                $.each(response.like_values, function (index, value) {
                    $("#inner").append
                    ('<div class="row">' +
                        '<div class="col-xs-6">' +
                        '<input class="' + value + '" data-name="' + value + '" type="number" name="weight[' + value + ']" min="1" max="3" value="1" style="text-align:center"> ' +
                        '</div>' +
                        '<div class="col-xs-6"  style="padding-left: 9px">' +
                        '<input type="checkbox"  data-name="' + value + '" class="checkbox" value="' + value + '" name="checkbox[' + value + ']"  checked >  ' +
                        '<label style="color:' + response.color[value] + '; font-weight: bold" for="skillChoice_' + index + '">' + value + ' </label>' +
                        '</div>' +
                        '</div>');
                });

            },
           error: function (jqXHR, textStatus, errorThrown) {
                    alert('jqXHR is : ' + jqXHR.value
                         + 'textStatus is : ' + textStatus
                         + ' errorThrown is : ' + errorThrown);

            },

          complete: function () {

              console.log("entered complete")
                $('#loader').hide();
                load_employees()

            },
        });


    });

In my controller there is a lot of stuff which i will not share because this code

  return response()->json([
         'like_values' => $like_values,
         'color' => $color,]);

at the end of my controller function is working and in chrome i can see the data available:
like_values and color in my chrome

My problem is that my success function is not being called and the arrays are not being iterated. However it used to work but i don’t know whats the problem now. I am getting an error (which i remember it used to work even with this error. I used to ignore it but it says :

SyntaxError: Unexpected token s in JSON at position 0

Maybe i am missing something related to this error.

Does anyone has a clue whats wrong?

Thanks in advance

2

Answers


  1. Chosen as BEST ANSWER

    i've found the issue. If you see the response in the screenshot i made, you can see also the output : string(15) xlsx ausgelöst. So i was also doing a var_dump() in my controller. So this string was not in json format this is why it was never going to my success function. Actually i never knew that everything which i send from controller to my view will be evaluated by ajax. I thought its only this code.

     return response()->json([
         'like_values' => $like_values,
         'color' => $color]); 
    

    which will be considered.

    However after removing the var_dumps() from controller it worked fine, it was only my actual response data which were sent to the view and ajax recognized it as json and success: function was executed.

    Thanks to yall anyway.


  2. JSON Syntax Rules state that data should be separated by commas however you added an extra comma in your return keyword to end your controller function.

    Change this:

      return response()->json([
         'like_values' => $like_values,
         'color' => $color,]);
    

    To:

      return response()->json([
             'like_values' => $like_values,
             'color' => $color]);
    
    Login or Signup to reply.
Please signup or login to give your own answer.
Back To Top
Search