Что делает этот кусок?
//remove items already in playlist and fix elementId
if(elementId.match(/\b\d{4}/))
{
//CALL REORDER
oldNode = document.getElementById(elementId);
oldNode.parentNode.removeChild(oldNode);
//snyc player and playlist (decrement)\
updateFlashPlrIndex(elementId, 'dec');
//remove leading playlist number (####)
elementId = elementId.substr(4);
} // end if( elementId.match(/\b\d{4}/) )
Ваш комментарий говорит, что он удаляет элементы в плейлисте, это может быть частью вашей проблемы?
Также вы должны отправить полный массив идентификаторов на сервер за один вызов, получить данные в виде массива и обработать их все сразу. Если вы делаете что-то подобное для своих параметров:
var params = "elementIDs=[" + elementIDs.join() + "]";
У вас будет массив элементов ID в кодировке json. Конечно, elementID должны быть массивом всех идентификаторов, которые были отправлены. Затем в вашем php декодируйте его, используя функцию json_decode, например:
// Parameter checking goes here
$elementIDs = json_decode($_GET['elementIDs']);
Тогда у вас будет массив для работы с вашим php. Когда вы закончите обработку, убедитесь, что любая форма, в которую вы возвращаете данные, также поддерживает массивы. Еще одним преимуществом здесь является то, что у вас не будет никакой специальной обработки только для одного элемента, которая избавит от некоторой части вашего кода и удалит любую рекурсию.