jquery странное поведение обновления страницы при замене содержимого

#php #jquery #ajax #html

#php #jquery #ajax #HTML

Вопрос:

У меня есть сайт с flash-плеером.

Этот код отправляет мне flash Player, хранящийся в player_codes.php:

 <script language="javascript" type="text/javascript" src="songs_related/flashmp3player/swfobject.js" ></script>
<!-- Div that contains player. -->
<div id="player">
    <h1>No flash player!</h1>
    <p>It looks like you don't have flash player installed. <a href="http://www.macromedia.com/go/getflashplayer" >Click here</a> to go to Macromedia download page.</p>
</div>

<!-- Script that embeds player. -->
<script language="javascript" type="text/javascript">
    var so = new SWFObject("songs_related/flashmp3player/flashmp3player.swf", "player", "290", "247", "9"); // Location of swf file. You can change player width and height here (using pixels or percents).
    so.addParam("quality", "high");
    so.addVariable("content_path","songs_related/uploads"); // Location of a folder with mp3 files (relative to php script).
    so.addVariable("color_path","songs_related/flashmp3player/default.xml"); // Location of xml file with color settings.
    so.addVariable("script_path","songs_related/flashmp3player/flashmp3player.php");     
    // Location of php script.
    so.write("player"); 
</script>
  

Вот как я включаю серверную часть проигрывателя

 <div id="main_music_player_for_the_site">
    <?php include_once('player_codes.php'); ?>
</div>
  

Если вы перейдете по этой ссылке здесь и нажмете воспроизвести любую песню в списке, произойдет следующее:

  1. Я отправляю запрос на серверную часть и устанавливаю песню.
  2. Мне приходит подтверждение.
  3. Я загружаю проигрыватель из player_codes.php (указано выше)

Но когда выполняется шаг 3, он обновляется! и застревает

Это не должно ссылаться на то, что оно также не обновляется на моем локальном хостинге.

Вот мой JS, который выполняет эту работу (вызывается после получения ответа на шаге 2)

 function callBackForLoadSong(data)
{
    //alert(data);
    if(data == "failed")
    {
        alert("Song requres you to login. Its easy to create an account! We will take you to the login page after you press ok");
        window.location.replace(REDIRECT);
    }
    else
    {
        //alert("s");
        $("#main_music_player_for_the_site").text("refreshing player...");
        $("#main_music_player_for_the_site").load("player_codes.php");
    }
}
  

Главное, что меня беспокоит, это то, почему страница обновляется??? и застревание

Комментарии:

1. Да, да, мы все спешим. Но не помечайте свои вопросы как «срочные» и потратьте еще немного времени на написание и форматирование, если хотите получить достойные ответы!

2. да, название немного вводит в заблуждение. в следующий раз буду осторожен

Ответ №1:

У вас одинаковый HREF для всех кнопок воспроизведения. Похоже, что ваше событие onClick загружает песни?

У вас должно быть :

 <a href="javascript:void(0)" onclick="loadSong('849','http://bedupako.com/songs.php');return false;">play</a>
  

Вместо :

 <a href="songs_related/create_play_list.php?single=0amp;amp;songid=849amp;amp;url=http://bedupako.com/songs.php" onclick="loadSong('849','http://bedupako.com/songs.php');return false;">play</a>
  

Прямо сейчас вы указываете javascript загрузить вашу песню с помощью события onClick, а браузеру — перейти на другой URL, используя HREF. javascript:void(0) не позволит браузеру выполнить HREF.

Комментарии:

1. На самом деле, return false уже предотвращает переход по ссылке. Его использование href глупо, но в конечном счете не проблема.

2. вау, тааак просто 🙂 1 сомнение в том, что я хочу иметь этот href там для возврата, когда нет JS. Как это сделать?

3. @Tomalak Решение действительно сработало. !!! но я также хочу href … хм, может быть, я попытаюсь заменить href в функции ready () jquery на javascript:void(0);

4. @footy Зачем вам HREF в данный конкретный момент? 1. Вы указываете javascript загрузить песню. Если вы одновременно измените URL-адрес, браузер обновит страницу, и вы начнете все сначала…

5. @footy: Тогда у вас, должно быть, также произошла ошибка в loadSong предотвращении завершения выполнения Javascript. Два фрагмента в этом ответе имеют одинаковый эффект .

Ответ №2:

Ну, настоящая проблема заключалась в моем возвращаемом значении false ПОСЛЕ ВЫПОЛНЕНИЯ ОБРАТНОГО ВЫЗОВА!!!

Вот исправленный JS :

 function callBackForLoadSong(data)
{
    //alert(data);
    if(data == "failed")
    {
        alert("Song requres you to login. Its easy to create an account! We will take you to the login page after you press ok");
        window.location.replace(REDIRECT);
    }
    else
    {
        //alert("s");
        $("#main_music_player_for_the_site").text("refreshing player...");
        $("#main_music_player_for_the_site").load("player_codes.php");
    }
    return false;
}
  

таким образом, возвращаемое значение false; также должно быть указано в функции

Комментарии:

1. Вряд ли. Но поскольку вы никогда не показывали использование этой функции, трудно понять, что вы делаете.

2. Что ж, если бы вы могли перейти по ссылке и проверить, были ли другие ошибки, это было бы полезно. Функция представляет собой обратный вызов данных, которые я отправляю на сервер thir по этой ссылке из другой функции $.get(to, parm, callBackForLoadSong);

3. У меня нет времени отлаживать вашу веб-страницу за вас. Пожалуйста, составьте полный минимальный тестовый пример для ваших вопросов; вы выполняете отладку, мы объясняем!

4. Ну, я не хочу, чтобы вы отлаживали! я могу сделать это сам. Firebug помогает мне в этом: P. всегда рад, что сообщество помогает.