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
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 avar_dump()
in my controller. So this string was not in json format this is why it was never going to mysuccess function
. Actually i never knew that everything which i send from controller to my view will be evaluated byajax
. I thought its only this code.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 andsuccess:
function was executed.Thanks to yall anyway.
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:
To: