I keep encountering a "Broken pipe" error when making an AJAX request in Django. The request is intended to retrieve text and selected languages, among other data, then translate it in the views, with the translated text appearing in the output window.
Here's my AJAX console output:
Here is AJAX code:
var outputTextarea = document.getElementById("output-textarea"); // AJAX request $(document).ready(function () { $('.translate-button').click(function () { // Retrieve input data var fromLanguage = document.getElementById("from-language-selectbox").selectedOptions[0]; var toLanguage = document.getElementById("to-language-selectbox").selectedOptions[0]; var isFlashcard = document.getElementById("is-flashcard-switch2").checked; var selectedDecks = document.getElementById("decks-list-selectbox").selectedOptions; console.log(selectedDecks) var selectedDeckValues = []; var inputText = document.getElementById("input-textarea").value; console.log(inputText); for (var i = 0; i < selectedDecks.length; i++) { selectedDeckValues.push(selectedDecks[i].textContent); } console.log(selectedDeckValues); var outputTextarea = document.getElementById("output-textarea"); $.ajax({ url: '{% url "mainapp:translator" %}', data: {'input_text': inputText,'is_flashcard': isFlashcard,'decks': selectedDeckValues,'from_language': fromLanguage.textContent,'to_language': toLanguage.textContent, }, dataType: 'json', success: function (data) { console.log("success"); outputText = data.output_text; outputTextarea.textContent = outputText; }, error: function (xhr, status, error) { console.log("Error occurred: " + error); } }); }); });
And here is view:
def translator(request):"""View for translatation.""" if request.headers.get("x-requested-with") == "XMLHttpRequest": #Retrieve data from AJAX request input_text = request.GET.get("input_text") is_flashcard = request.GET.get("is_flashcard") if is_flashcard == "true": is_flashcard = True else: is_flashcard = False decks = ["superdeck", "talja"] #request.GET.get("decks") from_language = Language.objects.get(name=request.GET.get("from_language")) from_language_symbol = from_language.symbol to_language = Language.objects.get(name=request.GET.get("to_language")) to_language_symbol = to_language.symbol #Translate text and create Translation object output_text = ts.translate_text(query_text=input_text, translator="google",from_language=from_language_symbol, to_language=to_language_symbol) translation = Translation(input_text=input_text, output_text=output_text,is_flashcard=is_flashcard, user=request.user, from_language=from_language, to_language=to_language) translation.save() # Create Flashcard objects and manage all selected decks if is_flashcard: for deck_name in decks: deck = Deck.objects.get(name=deck_name) flashcard = Flashcard(front=input_text, back=output_text, user=request.user, deck=deck) flashcard.save() return JsonResponse({"output_text":output_text}) else: translator_form = TranslatorForm(request.user) input_text = "" output_text = "" return render(request, "mainapp/translator.html", {"translator_form":translator_form, "input_text":input_text, "output_text":output_text})
In case of any questions, feel free to ask I will provide with needed parts of codes etc.