我有一个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结果)。
关于此解决方案的说明:
- 依赖于存在的对象,所以我在
ready()
事件中移动了所有内容 - 假设这是循环中众多按钮中的一个(因为PHP代码中有
$i
变量),因此数据在按钮的属性中 - 由于可能有几个按钮具有相同的功能,因此将其推广为倍数
- 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标记。
然而,如果这是从你的服务器端代码中复制的,你能发布你从服务器上得到的实际响应吗?因为这很可能是你的问题所在。
感谢