gpt4 book ai didi

javascript - 如何分离ajax响应和HTML代码?

转载 作者:行者123 更新时间:2023-12-02 14:10:44 25 4
gpt4 key购买 nike

我有一个ajax请求如下:

    $.ajax({
url: "/geodata",
data: {'lat':lat,'lng':lng},
type: "POST",
success: function(result) {
if ( typeof result == "string") {
console.log("helo");
} else {
// do things with the result here

结果是一个数组,如下所示:

arr = [{address: '1300 BRYANT ST',
block: '3903',
cnn: '517000',
latitude: '37.7690871267671',
longitude: '-122.411527667132',
received: '2016-05-06' },

more objects];

我想使用地址和 block 信息并将它们显示为我的 html 页面上的元素列表。

我担心的是,我不希望我的 ajax 函数太长并在请求中进行 HTML 编码。如何分离 DOM 代码(用于列出信息)和收到的结果?我试图避免编写意大利面条式代码。

最佳答案

无需重写大量代码的最简单方法就是使用函数

function getLocations(lat, lng) {
let req = $.post('/geodata', {lat: lat, lng: lng});
req.done(function(result) { renderLocations(result); });
req.fail(function(jqxhr, textStatus, err) { console.error(err); });
return req;
}

function renderLocations(locations) {
locations.foreach(function(location) {
// render location node
// <div class="location">
// <p>{location.address}</p>
// <p>{location.lat} {location.lng}</p>
// </div>
$('#locations').append(childNode);
});
}
<小时/>

否则,如果您熟悉 Promises,您可以更好地控制像这样的程序流程

function getLocations(lat, lng) {
return new Promise(function(resolve, reject) {
let req = $.post('/geodata', {lat: lat, lng: lng});
req.done(function(data, textStatus, req) { resolve(data); });
req.fail(function(req, textStatus, err) { reject(err); });
});
}

function renderLocations(parentNode) {
return function(locations) {
locations.foreach(function(location) {
// render location node
// <div class="location">
// <p>{location.address}</p>
// <p>{location.lat} {location.lng}</p>
// </div>
parentNode.append(childNode);
});
};
}

function logError(err) {
console.error('an error occurred:', err.message);
}

// put them together
getLocations(37, -122).then(renderLocations($('#locations')), logError);

关于javascript - 如何分离ajax响应和HTML代码?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39603898/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com