JQuery/AJAX problem
Morn
Sitter här med ett ganska stor javascript/jquery, ska pröva förklara så gott jag kan.
Det är i princip en facebookvägg, alltså man kan skriva poster och kommentera på poster.
Allt "fungerar" i princip men ett stort problem har uppstått, jag har allt som händer med jquery/ajax i en stor "LoadMe" funktion som körs först när document.ready, sen i slutet av den när den gjort allt så setter jag en windows.setTimeout(LoadMe, 2000)
Alltså den kör samma funktion igen som när den laddat klart sidan, har en del checkar så den kastar med högsta ID för poster och kommentarer och hämtar in nyare och det fungerar, det som inte fungerar är att för varje gång den kör LoadMe, vart annat sekund, så bindar den om submits, alltså skriver man en kommentar så postas den kommentaren X antal gånger beroende på hur länge man varit inne på sidan.
Har experimenterat lite med .live() .off().on() men inget som riktigt fungerar...
Är det någon som har stött på liknande problemer med "auto-refresh" och submit som "stackar" och som har en lösning på detta?
Väldigt tacksam för svar och förklaringar!
$.ajaxSetup({
cache: false
});
$(document).ready(LoadMe);
function LoadMe() {
$('.wall-new-post-input').off().on('focus', function() {
if ($(this).val() === 'write something') {
$(this).val('');
}
}).blur(function() {
if ($(this).val() === "") {
$(this).val('write something');
}
});
var highest = 0, this_id;
$(".wall-new-comment").each(function(i, v) {
this_id = parseInt($(this).attr('id'));
if (this_id > highest) {
highest = this_id;
}
});
$.get('index/xhrFetchComments/' + highest, function(o) {
for (var i = 0; i < o.length; i++) {
if (o[i].commentid > highest)
highest = o[i].commentid;
var delBtn = '';
$('#msg' + o[i].messageid).append(
'<div id="' + o[i].commentid + '" class="wall-new-comment">' +
'<div class="fleft" style="width: 390px;">' +
'<span class="actorPhoto">' +
'<img class="profilePicMini" src="' +
'avatar.gif"' +
' />' +
'</span>' +
'<p> <span class="actorName"><a href="sip:' + o[i].mail + '">' +
o[i].fullname + '</a></span></p><p> ' +
o[i].comment +
'</p>' +
'<span class="comment-margin">' + o[i].created + ' · ' + '' + o[i].location + '</span>' +
'</div>' +
'<div class="fright rBtn">' +
delBtn +
'</div>' +
'</div>'
);
}
}, 'json');
$('.wall-new-comment').off().on('submit', function() {
var url = $(this).attr('action');
var data = $(this).serialize();
$.post(url, data, function(o) {
$('#input' + o.messageid).val(''); // clear input field
// append a new div element with new comment
$('<div id="' + o.commentid + '" class="wall-new-comment ' + admincolor + '">' +
'<div class="fleft" style="width: 390px;">' +
'<span class="actorPhoto">' +
'<img class="profilePicMini" src="' +
'avatar.gif"' +
' />' +
'</span>' +
'<p> <span class="actorName"><a href="sip:' + o.mail + '">' +
o.fullname + '</a></span></p><p> ' +
o.comment +
'</p>' +
'<span class="comment-margin">' + o.created + ' · ' + '' + o.location + '</span>' +
'</div>' +
'<div class="fright rBtn">' +
'<a href="#" rel="' +
o.commentid +
'" class="del">X</a>' +
'</div>' +
'</div>').hide().appendTo('#msg' + o.messageid).fadeIn(1000);
}, 'json');
return false;
});
$('.wall-new-post').live('submit', function() {
var url = $(this).attr('action');
var data = $(this).serialize();
// Send post to var url
$.post(url, data, function(o) {
$(o.data).hide().prependTo("#wallItems").fadeIn(1000);
}, 'json');
$('.wall-new-post-input').val('write something');
return false;
});
window.setTimeout(LoadMe, 2000);
}