Я хочу вернуть клиенту XML-данные, которые можно отобразить в виде графика в mxGraph.
Моя основная цель - сохранить mxGraph на сервере, поэтому всякий раз, когда пользователь обращается к той же странице, отображается тот же график, на котором пользователь оставил его. Данные xml сохраняются на сервере, но не возвращаются клиенту в виде xml.
В настоящее время я пытался вернуть его как JSON, думая, что можно использовать значение как XML. Однако с ним возвращается "/ n", поэтому он не разбирается должным образом.
views.py
def saveData(request, user):
if request.method == "POST":
#Get user profile
member = Member.objects.get(username=user)
#Get XML data once user presses save
#xmlData = request.POST['xml']
member.data = request.POST['xml']
member.save()
print(member.data)
response = JsonResponse([
member.data
], safe = False);
#return render(request, 'fastcookapp/index.html', {"xmlData": member.data})
return HttpResponse(response, content_type = "application/json")
return HttpResponse('POST is not used')
ajax
var button = mxUtils.button('Save', function()
{
var encoder = new mxCodec();
var node = encoder.encode(graph.getModel());
var xml = mxUtils.getPrettyXml(node);
var csrftoken = getCookie('csrftoken');
$.ajax({
type: "POST",
url: "/saveData/",
data: { "xml": xml},
headers:{
"X-CSRFToken": csrftoken
},
success: function(data){
console.info("data" + data[0])
//functions in mxgraph to decode the xml back to a graph
var xmlDoc = mxUtils.parseXml(data[0]);
var node = xmlDoc.documentElement;
//console.info("node " + node)
var dec = new mxCodec(node.ownerDocument);
//console.info("dec " + dec)
//console.info("graph model " + graph.getModel())
dec.decode(node, graph.getModel());
}
});
//console.info(xml);
//mxUtils.popup(mxUtils.getPrettyXml(node), true);
});
models.py
class Member(User):
data = models.TextField(null=True)
def __str__(self):
return self.username



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


Я надеюсь, это поможет вам:
Вам пока не следует использовать JsonResponse, потому что данные, с которыми вы работаете, - это XML, а не JSON.
Сделайте так:
1 - Вверху views.py
import xmltodict
2 - Внутри кода вашего метода (def), например:
real_response = response.content
response_as_dict = xmltodict.parse(real_response)
return JsonResponse(response_as_dict)
3 - В обратном вызове успеха ajax вы должны работать с данными:
Например :
success: function(data) {
var textBox = document.getElementById('textBox');
textBox.innerText = data.parentNode.node;
}
Я уверен, что это сработает для вас!
Во время процесса отлаживайте и смотрите, что нужно заменить на «parentNode» и «node». Это был просто пример.