PHP到jquery对话()的交互问题


PHP to jquery dialog() interaction issues.

我有一个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对话框来打开此内容。传入的所有内容似乎都很完美(根据firebug的GET响应),但我仍然收到一个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粘贴到浏览器中,flash应用程序会按预期在浏览器中启动,但显然不会在jquery对话框中启动。我的jquery代码一定有问题吗?

(删除了错误答案。)


编辑:

最初,我将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. 假设这是循环中众多按钮中的一个(因为PHP代码中有$i变量),因此数据在按钮的属性中
  3. 由于可能有几个按钮具有相同的功能,因此将其推广为倍数
  4. jQuery加载命令(参见。,http://api.jquery.com/load/)采用3个参数:
    • url
    • 一些数据
    • 当负载返回时的回调函数(如果只提供2个参数,则假定第二个参数为回调函数)。回调参数为:
      • responseText,从服务器返回的HTML
      • text状态,状态消息
      • 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>

您能确认您显示的返回内容是实际内容吗?如果是这样的话,这是不对的,因为它包含PHP标记。

然而,如果这是从你的服务器端代码中复制的,你能发布你从服务器上得到的实际响应吗?因为这很可能是你的问题所在。

感谢