Проблемы взаимодействия PHP с jquery dialog (). - PullRequest
4 голосов
/ 10 января 2012

У меня есть кнопка HTML:

<button id="monitor" onclick="startMonitor('<?php echo $result_cameras[$i]["camera_hash"]; ?>', '<?php echo $result_cameras[$i]["camera_name"]; ?>', '<?php echo $camera_quality_flash; ?>');">Monitor</button>

Это будет загружать флэш-контент:

<script language="javascript" type="text/javascript" src="https://ajax.googleapis.com/ajax/libs/jquery/1.7.1/jquery.js"></script>
<script language="javascript" type="text/javascript" src="https://ajax.googleapis.com/ajax/libs/jqueryui/1.8.16/jquery-ui.js"></script>
<script type="text/javascript">
var js = jQuery.noConflict();

var startMonitor = function(cameraHash, cameraName, cameraFlashQuality) {
var url = ['flash/app.php?user=<?php echo $id_hash; ?>', 'camera=' + cameraHash, 'name=' + encodeURIComponent(cameraName), 'quality=' + cameraFlashQuality].join('&');
js('<div></div>').load(url, function() {
    js(this).dialog();
});
};

Я хочу использовать диалоговое окно jquery, чтобы открыть это содержимое.Все прошло, кажется, идеально (в соответствии с ответом GET от firebug), но я все еще получаю ошибку jquery.

missing ; before statement jquery.js line 612

Что я делаю не так?Я даже не уверен, как это отладить.Заранее спасибо.

РЕДАКТИРОВАТЬ: Firebug сообщает GET как: http://myurl.com/flash/app.php?user=dee8c751cfdd2b5fb8194a3a9bac12044621df3d&camera=8f753c6bb3a8d9852a220abff0ed0d7686563007&name=test22&quality=0.Я ожидаю, что эти значения.

Если я вставлю этот URL в мой браузер, приложение флэш-памяти запускается в браузере, как и ожидалось, но не в диалоговом окне jquery.Должно быть что-то не так с моим кодом jquery?

Ответы [ 2 ]

7 голосов
/ 14 января 2012

(неправильный ответ удален.)


Редактировать:

Изначально я неверно истолковал jquery.js как файл, который вы создали, а не как реальныйJQuery.После тестирования кода я вижу, что проблема в отправляемых вами данных.Можете ли вы опубликовать образец с данными для $result_cameras[$i]["camera_hash"], $result_cameras[$i]["camera_name"], $camera_quality_flash и $id_hash?Кроме того, каково значение для url, которое получается?


Решение:

Кнопка отправляет форму, и страница перезагружается.Откроется диалоговое окно, но затем страница сразу же перезагружается, поэтому кажется, что диалога никогда не было.Чтобы предотвратить такое поведение, функция кнопки click() должна возвращать false (если значение не возвращается, оно обрабатывается как результат true ).

Примечания к этому решению:

  1. Полагается на существующие объекты, поэтому я переместил все в событие ready().
  2. Предполагается, что это одна из множества кнопок внутри цикла (из-за переменной $i в коде PHP), поэтому данные находятся в атрибутах кнопки.
  3. Поскольку может быть несколько кнопок с одинаковой функциональностью, она обобщается для кратных.
  4. Команда загрузки jQuery (ср., http://api.jquery.com/load/) принимает 3 параметра:
    • URL
    • некоторые данные
    • функция обратного вызовакогда возвращается нагрузка (если вы предоставляете только 2 параметра, предполагается, что второй является функцией обратного вызова).Параметры обратного вызова:
      • responseText , HTML-код, возвращаемый с сервера
      • textStatus , сообщение о состоянии
      • XMLHttpRequest , интерфейс запроса, который можно использовать для просмотра различной информации о запросе (ср., http://www.w3.org/TR/XMLHttpRequest/)

HTML тестовый файл:

<html>
<head>
<script language="javascript" type="text/javascript" src="https://ajax.googleapis.com/ajax/libs/jquery/1.7.1/jquery.js"></script>
<script language="javascript" type="text/javascript" src="https://ajax.googleapis.com/ajax/libs/jqueryui/1.8.16/jquery-ui.js"></script>
</head>
<body>
<form>
    <?php 
        $i = 0;
        $result_cameras = array(array("camera_hash" => "test1", "camera_name" => "test2"));
        $camera_quality_flash = 1;
        $id_hash = "hashish";

        echo '<button id="monitor1" class="monitor" camHash="' . $result_cameras[$i]["camera_hash"] . '" camName="' . $result_cameras[$i]["camera_name"] . '" camQual="' . $camera_quality_flash . '" >Monitor 1</button>';
        echo '<button id="monitor2" class="monitor" camHash="' . $result_cameras[$i]["camera_hash"] . '-2" camName="' . $result_cameras[$i]["camera_name"] . '-2" camQual="' . $camera_quality_flash . '-2" >Monitor 2</button>';
    ?>
    <div class="tester">TEST DIV</div>
</form>
</body>

<script type="text/javascript">
    var js = jQuery.noConflict();
    js(document).ready(function(){

        var monitor = js(".monitor");
        //alert(monitor[1]);

        monitor.each(
            function(i){ 
                js(this).click(
                    function(){
                        //alert(js(this).attr('camHash'));
                        startMonitor( 
                            js(this).attr('camHash'),
                            js(this).attr('camName'),
                            js(this).attr('camQual')
                        ); 
                        return false;
                    }
                );
            }
        );

        var startMonitor = function(cameraHash, cameraName, cameraFlashQuality) {

            var url = [
                    'flash/app.php?user=<?php echo $id_hash; ?>', 
                    'camera=' + cameraHash, 
                    'name=' + encodeURIComponent(cameraName), 
                    'quality=' + cameraFlashQuality
                ].join('&');

            js('<div>TEST DIV 2</div>').load(url
                , function(response, status, xhr) {
                    js('.tester').text( "<div>xhr: <br />"
                        + xhr.status + "<br />"
                        + xhr.statusText + "<br />"
                        + xhr.getAllResponseHeaders() + "<br />"
                        + xhr.responseText + "<br />"
                        + xhr.responseXML + "<br />"
                        + "</div>"
                    );
//                  js(this).dialog();
                }
            );
        };
    });
</script>

</html>
0 голосов
/ 20 января 2012

Можете ли вы подтвердить, что показанный вами возвращаемый контент является фактическим? Если это так, то это неправильно, поскольку содержит теги PHP.

Если, однако, это скопировано из вашего кода на стороне сервера, не могли бы вы опубликовать АКТУАЛЬНЫЙ ответ, который вы получите от сервера, так как это, скорее всего, там, где ваша проблема.

Спасибо

...