Так стоп, у вас там ещё eval зачем-то. Вам надо тогда тройное экранирование фигачить(\\\\n). Вот только eval там нафиг не нужен.
Так попробуйте:
function jsOnResponse($obj)
{
$obj = addcslashes($obj, "\r\n");
echo '
<script type="text/javascript">
window.parent.onResponse('.$obj.');
</script>
';
}
function onResponse(obj) {
alert('Файл ' + obj.filename + (obj.success ? " " : " НЕ ") + "загружен.");
var parentDiv = document.getElementById("vkPostsListing");
parentDiv.className = 'oneVKPost';
var all_tags = parentDiv.getElementsByTagName('div')[0];
var container = document.createElement('div');
container.innerHTML = "<p class='vktext'>" + obj.text + "</p><p class='vkimage' ><img src='/images/vkimages/" + obj.filename + "'></p>";
parentDiv.insertBefore(container, all_tags);
}
Если не будет работать - покажите, что вообще выдаёт
echo $obj; чистым текстом.