我正在使用砌体类型代码在我的页面上显示 Div,并使用 API 获取数据,以便将所有内容加载html+=
到 DOM 中。
例如,每个 div 都是这样加载的
html += '<li><div class="classname>content';
html += '<div id="like'+image.article_id+'">';
html += '<a href="#" class="like" id="'+image.article_id+'">';
html += '<div class="bLike" title="Like this article"></div></a></div>';
html += '<div id="unlike'+image.article_id+'" style="display:none;">';
html += '<a href="#" class="unlike" id="'+image.article_id+'">';
html += '<div class="bUnlike" title="Unlike this article"></div></a></div>';
html += '</div></li>';
现在,我在显示的结果中使用了一个赞按钮,该按钮使用 ajax 更新我的数据库,以允许用户查看他们喜欢的内容。简单的。
因此,为了让 ajax 代码发挥作用,我必须将其加载到 DOM 中,如下所示,我在上面显示的 div 示例之后加载它:
html += '<script type="text/javascript">';
html += '$(function()';
html += '{';
html += '$(".like").click(function(){';
html += 'var element = $(this);';
html += 'var I = element.attr("id");';
html += 'var info = \'wish_id=\' + I;';
html += '$(\'#like\'+I).hide();';
html += '$(\'#unlike\'+I).show();';
html += '$.ajax({';
html += 'type: "POST",';
html += 'url: "/pages/includes/ajax/like.php",';
html += 'data: info,';
html += 'success: function(){';
html += '}';
html += '});';
html += 'return false;';
html += '});';
html += '});';
html += '</script>';
html += '<script type="text/javascript" >';
html += '$(function()';
html += '{';
html += '$(".unlike").click(function(){';
html += 'var element = $(this);';
html += 'var I = element.attr("id");';
html += 'var info = \'wish_id=\' + I;';
html += '$(\'#unlike\'+I).hide();';
html += '$(\'#like\'+I).show();';
html += '$.ajax({';
html += 'type: "POST",';
html += 'url: "/pages/includes/ajax/unlike.php",';
html += 'data: info,';
html += 'success: function(){';
html += '}';
html += '});';
html += 'return false;';
html += '});';
html += '});';
html += '</script>';
现在,当用户点击喜欢或不喜欢时,它会触发两次,因此会两次访问数据库,并且基本上会使整个工作负载加倍,这从来都不是好事。
所以,我想也许上面显示的脚本已经被加载到 DOM 中两次。所以我去 firefox firebug 看一下加载到 DOM 中的代码。html+=
我使用相同但不是上面的脚本加载的所有 div 都在那里。我知道它在那里,因为它工作得很好。
那么为什么我看不到它,为什么它会发射两次呢?
有一个更好的方法吗?
编辑:
这是加载页面的 API:
function loadData() {
isLoading = true;
$('#loaderCircle').show();
$.ajax({
url: apiURL, // fetches from MySQL
dataType: 'json', // data type
data: {page: page}, // page number so each request brings in next records
success: onLoadData // loads the data which is looped and html+= as at top of post
});
};