I am stuck on an issue. I am hoping to send data back to my Flask
backend using Plain Old Javascript's
XMLHTTPRequest
object. I hope to get CSV data
in String
format back.
function ajax_request() {
const request = new XMLHttpRequest();
let csrf_token = '{{ csrf_token() }}';
let json_data = {
'data' :[]
};
json_data['data'].push(data);
// Define what happens on successful data submission
request.addEventListener('load', function(event) {
console.log("This Worked");
});
// Define what happens in case of error
request.addEventListener('error', function(event) {
alert('Error: AJAX request failed.');
console.log(request.responseText);
} );
// Open our request and set the headers.
request.open("POST", "/my-route", true);
request.setRequestHeader("X-CSRFToken", csrf_token);
// Add the required HTTP header for form data POST requests
request.setRequestHeader('content-type', 'application/x-www-form-urlencoded;charset=UTF-8');
request.send(json_data);
}
This seems fair enough. I am not sure whether I can send json with the x-www-form-urlencoded
format. I might need json
instead but am unsure if that then means the response needs to be json, which is not what I want. I keep trying to play around with this and getting nowhere
My app.py is
@dashboard_blueprint.route('/my-route', methods=["GET", "POST"])
def my_page():
# If the user is changing the variables / giving us data
if request.method == "POST":
print(request.form)
json_data = request.form.get('data')
# parse on json data
csv_data = ....
return csv_data
else:
print(form.errors)
I tried request.json
, request.data
and some other combinations. What is odd is that I can get it to work when I do not pass any variables to get the new CSV data but just make the request for CSV data without any variables. So I seem quite stuck. Any advice is appreciated!