Visualizzazione dei risultati da 1 a 8 su 8
  1. #1

    Oggetto non trovato dopo chiamata ajax

    Ciao a tutti
    ho il seguente div che non fa altro che aprire una popup all'interno del quale visualizzo un video quando clicco su un'immagine.

    codice:
    <div id="dvVisualizzaVideo" class="testo" style="display:none; text-align:center;">
            <div class="popup">
            </div>
            <div style="position: fixed; top: 0; left: 0; width: 100%; height: 340px; z-index: 1100;
                margin: 50px auto" align="center">
                <div style="width: 420px; height: 330px; padding: 5px; background-color: #FFFFFF;
                    border: #000000 solid 1px;">
                    <div style="float: left; width: 420px; height: 330px;">
                        <div class="sottotitolo_pagina" style="margin-top: 0px;">
                            VIDEO
                        </div>
                        <div style="float: right;">
                            [img]close.png[/img]
                        </div>
                        <div style="float: left; width: 420px; height: 285px; text-align: center;">
                            <asp:MediaPlayer ID="mpVideo" runat="server" Height="240px" MediaSkinSource="~/Skins/Simple.xaml"
                                AutoPlay="true" Width="320px" Windowless="true">
                            </asp:MediaPlayer>
                        </div>
                    </div>
                </div>
            </div>
        </div>
    Quando clicco sull'immagine eseguo una chiamata ajax che visualizza il div e recupera il percorso del video:

    codice:
    function VisualizzaVideo(id_video, tipo) {
                PageMethods.ajaxVisualizzaVideo(id_video, tipo, OnGetDataComplete, OnGetDataComplete);           
            }
    
           function OnGetDataComplete(result, userContext, methodName) { 
                var dvVisualizzaVideo = document.getElementById('dvVisualizzaVideo');
                dvVisualizzaVideo.style.display = "";
                            
                var obj = $find('<%=mpVideo.ClientID %>');
                obj.set_mediaSource(result);
                obj.set_autoPlay(true);
            }    
    
            function OnGetDataError(error, userContext, methodName) { 
                if (error != null) {
                    alert(error.get_message()); 
              } 
            }
    codice:
    [System.Web.Services.WebMethod]
        public static string ajaxVisualizzaVideo(string id_video, string tipo)
        {
            ...        
            
            return url;
        }
    Ricevo questo errore quando clicco su un'immagine per visualizzare un video:

    Errore: obj is null
    sulla riga:
    obj.set_mediaSource(result);

    La cosa strana è che se carico la pagina con il div visibile e inserisco un qualsiasi controllo che al click mi richiama 'VisualizzaVideo' funziona tutto correttamente. Invece, se il div inizialmente è nascosto non funziona.
    Grazie mille

  2. #2
    una domanda:
    dvVisualizzaVideo.style.display = "";
    funziona con tutti i browser? forse meglio se metti
    dvVisualizzaVideo.style.display = "block";

    quindi l'errore alla riga
    obj.set_mediaSource(result);
    ti dice che obj non esiste? oppure result non esite? (la prima vero?)

    io in genere $find lo utilizzo per i controlli AJAX che espongono un "behavior".
    Non conosco il controllo asp:MediaPlayer, ma prova a cercarlo in questo modo:

    codice:
    var obj = $get('<%=mpVideo.ClientID %>');
    if (obj)
    {
    	obj.set_mediaSource(result);
    	obj.set_autoPlay(true);
    } else {
    	alert('errore nel caricamento del Player');
    }

  3. #3
    Grazie per l'aiuto
    ora mi da questo errore:
    Errore: obj.set_mediaSource is not a function

    Non capisco perchè non funziona quando il div parte invisibile e poi al click lo visualizzo e richiamo la funzione ajax.

  4. #4
    Sono andato a vedere un po di documentazione per l'oggetto asp:mediaplayer.
    In effetti supporta il $find e non il $get .


    Ho scaricato l'ultima versione della libreria System.web.SilverLight.dll ed ho fatto questo semplicissimo esempio funzionante:

    codice:
    <%@ Page Language="C#" %>
    
    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    <html xmlns="http://www.w3.org/1999/xhtml">
    <head runat="server">
        <title></title>
        <script type="text/javascript">
            function VediVideo() {
                //debugger;
                $get('mpContainer').style.display = 'block';
                var video = $find('<%= MediaPlayer1.ClientID %>');
                if (video != null) {
                    video.set_mediaSource('IMG_0183.mov');
                    video.set_autoPlay('true');
                    //alert(video.get_mediaSource());
                }
            }
        </script>
    </head>
    <body>
        <form id="form1" runat="server">
        <div>
            <asp:ScriptManager ID="ScriptManager1" runat="server" />
            <input id="Button1" type="button" value="button" onclick="VediVideo();" />
            <div id="mpContainer" style="display: none;">
                <asp:MediaPlayer ID="MediaPlayer1" runat="server" Width="640px"
                    Height="480px" AutoPlay="false" />
            </div>
        </div>
        </form>
    </body>
    </html>
    Prova a scaricare anche tu:
    http://archive.msdn.microsoft.com/aspnetprojects

  5. #5
    Grazie
    appena posso controllo e ti faccio sapere

  6. #6
    Ciao
    ho provato, ma con il find non trova l'oggetto
    se uso il get mi dice: Errore: obj.set_mediaSource is not a function

    Ma questo lo ricevo solo se il div inizialmente è nascosto. Se il div non è nascosto funziona sia con il find e sia con il get

  7. #7
    questo tipo di comportamento strano, l'ho avuto rare volte.
    Succedeva che avevo ad esempio un panel od un controllo nascosto non con lo style, ma con la proprietà lato server "visible=false".

    non è che hai qualcosa del genere?
    Non saprei più cosa controllare

    Se proprio non riesci a risolvere, invece di fare display none/block, fai un top -1000/x,
    dove x è la posizione che ti interessa.
    In questo modo il div non è mai nascosto, ma semplicemente posizionato a -1000
    Lo so che fa cagare, ma non mi viene in mente altro

    ciao

  8. #8
    provo come hai detto
    non ho nessun controllo lato server con visible=false
    grazie mille

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.