【发布时间】:2020-06-20 18:36:16
【问题描述】:
我向服务器发送了一个 Ajax 请求以获取一些过滤后的数据,这是我从服务器收到的示例:
(3) [{…}, {…}, {…}]
0: {id: 1, title: "12 Rue Longueil", slug: "12-rue-longueil", latitude: null, longitude: null, …}
1: {id: 2, title: "15 Rue Sherbrooke LM", slug: "15-rue-sherbrooke-lm", latitude: null, longitude: null, …}
2: {id: 3, title: "Cycle Neron", slug: "cycle-neron", latitude: "-73.5987000000000000", longitude: "45.4799000000000000", …}
length: 3
__proto__: Array(0)
以上数据是从控制台记录的。
我想在下面卡片中的 HTMl 标签中显示这些数据。
但为此我需要使用接收到的数据并使用 JavaScript 创建子级,例如document.createElement('DIV')。然后放置这些数据。
$(document).on('submit', "#filterform", function (e) {
e.preventDefault();
$.ajax({
type: 'GET',
url: "{% url 'listing:search' %}",
data: {
listing_for: $('#listing_for').val(),
// cutted
},
success: function (response) {
const listings = eval(response);
const content = document.getElementById('content');
for (let i = 0; i < listings.length; i++) {
const div = document.createElement('div');
div.className = 'listing mgb-1';
div.innerHTML = data[i].title;
content.appendChild(div);
// have to create, add lots of divs and classes
}
}
})
})
我想知道是否有办法将 Ajax 请求数据作为模板变量发送?还是我必须使用 Javascript 对所有 HTML 标签进行硬编码?
编辑:根据第一个答案创建单独的 HTML 编辑内容。
def search(request):
...
lst = list()
for listing in queryset:
ser = ListingSerializer(listing)
lst.append(ser.data)
return render(request, 'listing/newHtmlFile.html', {'listings': json.dumps(lst)})
单独的 HTML:
{% for list in listings %}
<div class="jumbotron">
<h1>{{ list.title }}</h1>
</div>
{% endfor %}
和ajax请求:
success: function (response) {
document.querySelector('#content').insertAdjacentHTML('beforeend', response);
}
【问题讨论】:
-
不确定成功函数中响应、列表和数据之间的关系...
-
我不确定,但服务器发送的响应不是在成功函数中处理
-
当然,但是,您似乎没有对响应做任何事情,而是在迭代一个名为
data的变量,该变量未在任何地方定义... -
刚刚编辑了答案,我不得不迭代
response变量