【发布时间】:2018-08-02 18:39:22
【问题描述】:
这可能是一个愚蠢的问题(没有愚蠢的问题是不正确的).. 但是这里有。我会列出我在做什么:
1) 用户登录到一个页面,首先发生的是使用 php 从 MySQL 数据库中提取对象列表。它通过 json_encode() 返回一个对象数组。
然后页面为每个对象动态构建一个 DOM 元素,并通过 jQuery $('container').append(.....> 附加到一个容器中。这通过一个循环和一个被分配的 php 变量发生作为一个javascript变量..代码的重要部分:
for(var i = 0, len = userObjects.length; i < len; i++){
var currentObject = userObjectsObjects[i];
var isCurrentFavorite = isFavorite(currentObject.isFavorite);
var ratings = buildRatingString(currentObject.ratings, currentObject.raters);
if(count % 4 !=0){
$(".content").append('<div class=col-md-3>.............');
count++;
}else if(count % 4 == 0){
$(".content").append('<div class=col-md-3>........');
count++;
}
$(".content").append('</div></div>');
}
这会构建一个 DOM 元素并放置相应的 currentObject。放到适当的位置并显示在页面上。
所有这些都很好。不理想(我愿意接受有关如何优化该过程的建议,因为这对我来说似乎很复杂),但它确实有效。
我的问题:
用户可以点击一颗心来添加到他们的收藏夹中。点击点击一个函数,在该函数中检查对象当前是否被收藏,并通过 ajax 调用采取适当的操作。
目前我知道如何获取 objectId 的唯一方法是将其设置为收藏夹按钮的 id。单击按钮(隐藏且心形图标位于其位置)时,它将该信息发送到函数 toggleFavorites() 并将信息发送到数据库..即..
<button type="button" id="'+currentObject.objectId+'"></button>
代码:(objId是上面按钮分配的id^^^^^)
function toggleFavorite(objId, isFav){
var value = isFav;
var objectId= objId;
var toTable = '';
if(value == 'Y'){
toTable = 'N';
}else if(value == 'N'){
toTable = 'Y';
}
ajaxIt(toTable, recipeId);
function ajaxIt(toTable, objectId){
$.ajax({
type: 'post',
url: '../PHP/update_favorite.php',
data: {isFavorite: toTable, objectId: objectId},
success: function(){
if($('#heart' + objectId).hasClass("redClass")){
$('#heart' + objectId).addClass('grayClass')
$('#heart' + objectId).removeClass("redClass");
}else if($('#heart' + objectId).hasClass("grayClass")){
$('#heart' + objectId).removeClass("grayClass");
$('#heart' + objectId).addClass('redClass');
**I WANT TO UPDATE THE OBJECT IN HERE**
}
}
});
return false;
}
}
此变量的设置取决于对象当前是否为收藏夹……即在初始对象拉取时。所以,如果它当前是收藏夹并且用户点击了心脏.. var toTable 将 = 'N' (从收藏夹中删除).. 反之亦然。
我在ajax成功函数中手动设置了心形颜色,但是我遇到了这个问题,需要更改实际对象:
如果对象当前是收藏夹,则在拉取对象时用 isFavorite: 'Y' 表示。您单击心脏,ajax 正确地将“N”发送到表.. 我已确认有效。心由红色变为灰色。如果您在不刷新页面的情况下再次单击心脏以添加到收藏夹,isFavorite 仍然是“Y”(未使用更新的表值提取新对象)并且它仍然向表发送“N”。
是否可以像这样更新动态创建的对象,以便在调用 toggleFavorite() 函数时,它具有正确的表值?
对不起,这太罗嗦了……我没有编程知识或词汇,还不够简洁。
【问题讨论】:
标签: javascript ajax object dynamic