Родительская функция PHP + Javascript не вызывается - PullRequest
0 голосов
/ 02 февраля 2012

Хорошо, я пытался найти ответ на этот вопрос уже несколько часов, но сам не смог его решить. Я пытаюсь вызвать родительскую функцию Javascript из функции PHP, однако она не вызывается. При использовании метода onclick onclick='parent.dosomething(); кажется, что все работает нормально, но если я попытаюсь вызвать функцию, повторив ее, по какой-то причине она просто не получится.

echo "<script>parent.reloadprofmessages();</script>"; //this is what is not getting called

Вот функция PHP:

function checkactivity($username)
{
    //These are just queries being executed (irrelevant)

    $querystats = "SELECT users.fullname, activity.id, activity.sender, activity.receiver, activity.type, activity.dateposted, activity.seen, activity.related FROM activity, users WHERE activity.receiver = '$username' && activity.seen = '0' ORDER BY id DESC LIMIT 1";
    $resultstats = mysql_query($querystats);
    $num_stats = mysql_num_rows($resultstats);
    $rowactivity = mysql_fetch_assoc($resultstats);

    //End of queries

    if($num_stats > 0) //If there are registries
    {
        $user = $_SESSION['Username'];

        $activity_date = $rowactivity["dateposted"];
        $activity_type = $rowactivity["type"];
        $activity_sender = $rowactivity["sender"];
        $timeactivity = strtotime( "$activity_date" );
        $actualtime = time();

        $timetoseconds = $actualtime - $timeposted; 
        $timetominutes = floor($timepassedtoseconds/60);

        if($timetominutes < 2)
        {
            if($activity_sender != $user)
            {
                if($activity_type == 1) //Messages
                {
                    echo "<script>parent.reloadprofmessages();</script>"; //this is what is not getting called
                }
            }
        }

    }
}

И это моя функция Javascript на родительской странице:

function reloadprofmessages()
{
    $('#friendrequests').load('showprofmessages.php?username=<?php echo $actualuser; ?>').fadeIn("slow");
} //refreshes messages

Я нажал CTRL + Shift + I в Google Chrome, чтобы перейти на страницу инструментов разработчика, Сеть>, которая выполняет запрос, который вызывает функцию PHP> Предварительный просмотр, и вот что я получил: <script>parent.reloadprofmessages();</script> Однако функция не вызывается. Решение этой проблемы решило бы мне много проблем, для меня все еще остается загадкой знать, почему это не работает, так как это работало в других случаях. Заранее благодарю за помощь.

Ответы [ 3 ]

0 голосов
/ 02 февраля 2012

Добавить атрибут типа для тега script

echo "<script type='text/javascript' >parent.reloadprofmessages();</script>"; 

и не забудьте определить функцию javascript перед этой строкой

0 голосов
/ 02 февраля 2012

Так вот что было не так: (показывая ошибки)

function checkactivity($username)
{
    //These are just queries being executed (irrelevant)

    $querystats = "SELECT users.fullname, activity.id, activity.sender, activity.receiver, activity.type, activity.dateposted, activity.seen, activity.related FROM activity, users WHERE activity.receiver = '$username' && activity.seen = '0' ORDER BY id DESC LIMIT 1";
    $resultstats = mysql_query($querystats);
    $num_stats = mysql_num_rows($resultstats);
    $rowactivity = mysql_fetch_assoc($resultstats);

    //End of queries

    if($num_stats > 0) //If there are registries
    {
        $user = $_SESSION['Username'];

        $activity_date = $rowactivity["dateposted"];
        $activity_type = $rowactivity["type"];
        $activity_sender = $rowactivity["sender"];
        $timeactivity = strtotime( "$activity_date" ); //$timeactivity was not being used
        $actualtime = time();

        $timetoseconds = $actualtime - $timeposted; //$timeposted doesn't even exist, in other words I wasn't even converting the $activity_date timestamp to time.
        $timetominutes = floor($timepassedtoseconds/60);

        if($timetominutes < 2)
        {
            if($activity_sender != $user)
            {
                if($activity_type == 1) //Messages
                {
                    echo "<script>parent.reloadprofmessages();</script>"; //this was not the correct way of calling a function from the parent page.
                }
            }
        }

    }
}

О функции Javascript: Вот чем я закончил:

var auto_refresh = setInterval(
function reloadstring()
{
        $.get("checknewactivity.php?vprofile=<?php echo $actualuser; ?>", function(activity){
        if (activity == 1) 
        {
            $('#profcommentsdiv').load('showprofmessages.php?vprofile=<?php echo $actualuser; ?>').fadeIn("slow");
        }
        });
}, 1000); // refresh every 1000 milliseconds

И теперь это работает, спасибо за вашу помощь, я действительно ценю это, и, как обычно, я всегда добираюсь до более безопасного решения, спрашивая его здесь.

0 голосов
/ 02 февраля 2012

Не очень хорошая идея получить javascript и выполнить его с AJAX. Я хотел бы сначала изменить ваш PHP следующим образом:

if($activity_type == 1) //Messages
{
    echo "1";
}
else {
    echo "0";
}

Затем измените свой Javascript на это:

function reloadprofmessages()
{
    var can_reload = $.ajax({ url: "showprofmessages.php?username=<?php echo $actualuser; ?>" });
    if (can_reload) {
        parent.erloadprofmessages();
    }
}

Надеюсь, что поможет

...