一个要命的JQuery问题——急救

神探狄仁杰 2011-07-22 10:49:39
我要动态给一下参数赋值:
var imgLink=escape("http://127.0.0.1:8080/standard/index");
var pics = '';
var links = imgLink+'|'+imgLink+'|'+imgLink+'|'+imgLink+'|'+imgLink;
var texts = '';
var focus_width=200;
var focus_height=150;
var text_height=18;
var swf_height = focus_height+text_height;

我用jquery取值,也是成功的,代码如下:
$.ajax({
url : 'portal/newsPicture',
type : 'POST',
async : false,
dataType : 'json',
success : function(data, status) {
for(var i = 0; i < data.length; i ++) {
if(i < data.length-1) {
pics += data[i].pictureUrl + '|';
texts += data[i].pictureName + '|';
} else {
pics = pics + data[i].pictureUrl;
texts = texts + data[i].pictureName;
}
}
}
});

现在的问题是:由于ajax默认的是异步调用,而且是等到所有的DOM加载完成后,才进行调用的。所以,在执行以下代码时,其参数仍然是空值。代码如下:
document.write('<object classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" codebase="http://fpdownload.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,0,0" width="'+ focus_width +'" height="'+ swf_height +'">');
document.write('<param name="allowScriptAccess" value="sameDomain"><param name="movie" value="images/focus1.swf"><param name="quality" value="high"><param name="bgcolor" value="#F0F0F0">');
document.write('<param name="menu" value="false"><param name=wmode value="opaque">');
document.write('<param name="FlashVars" value="pics='+pics+'&links='+links+'&texts='+texts+'&borderwidth='+focus_width+'&borderheight='+focus_height+'&textheight='+text_height+'">');
document.write('</object>');

我也尝试这将以上代码,直接写成:
<object classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" codebase="http://fpdownload.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,0,0" width="'+ focus_width +'" height="'+ swf_height +'">
<param name="allowScriptAccess" value="sameDomain"><param name="movie" value="images/focus1.swf"><param name="quality" value="high"><param name="bgcolor" value="#F0F0F0">
<param name="menu" value="false"><param name=wmode value="opaque">
<param name="FlashVars" value="pics='+pics+'&links='+links+'&texts='+texts+'&borderwidth='+focus_width+'&borderheight='+focus_height+'&textheight='+text_height+'">
</object>
。这样的话,数据有了,但是却把我当前的网页被这个给覆盖了。
我又尝试着:将这两段代码,分别放入success中,也是被这个flash动画覆盖了当前页,其他的内容不能显示。

求教:到底怎么做,既能做到异步赋值,也不让其flash动画把当前页给覆盖了。
...全文
150 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
神探狄仁杰 2011-07-23
  • 打赏
  • 举报
回复
hyindream,好厉害哇!果然是这样的呢!
truecoffeefox 2011-07-22
  • 打赏
  • 举报
回复
试试在ajax的complete里写document.write输出

或者拼装object给一个div或者span赋值显示
神探狄仁杰 2011-07-22
  • 打赏
  • 举报
回复
控制了呀,有大小的哦。加载完后的情况是:<object width="200" height="168">
truecoffeefox 2011-07-22
  • 打赏
  • 举报
回复
你这个object没控制大小啊,和jquery没啥关系
胡飞 2011-07-22
  • 打赏
  • 举报
回复

<html>
<head>
<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.4.2/jquery.min.js" type="text/javascript">
</script>
<script type="text/javascript">
$(function(){
$.ajax({
url: 'portal/newsPicture',
type: 'POST',
async: false,
dataType: 'json',
success: function(data, status){
for (var i = 0; i < data.length; i++) {
if (i < data.length - 1) {
pics += data[i].pictureUrl + '|';
texts += data[i].pictureName + '|';
}
else {
pics = pics + data[i].pictureUrl;
texts = texts + data[i].pictureName;
}
}
var html = [];
html.push('<object classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" codebase="http://fpdownload.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,0,0" width="' + focus_width + '" height="' + swf_height + '">');
html.push('<param name="allowScriptAccess" value="sameDomain"><param name="movie" value="images/focus1.swf"><param name="quality" value="high"><param name="bgcolor" value="#F0F0F0">');
html.push('<param name="menu" value="false"><param name=wmode value="opaque">');
html.push('<param name="FlashVars" value="pics=' + pics + '&links=' + links + '&texts=' + texts + '&borderwidth=' + focus_width + '&borderheight=' + focus_height + '&textheight=' + text_height + '">');
html.push('</object>');
$('#box').append(html.join(''));
html = null;
}
});
})
</script>
</head>
<body>
<div id='box' style="border: 1px solid black;padding:10px;">
</div>
</body>
</html>
hyindream 2011-07-22
  • 打赏
  • 举报
回复
既然用了jQuery就用提纯粹点吧。

success : function(data, status) {
.....
}
中把要写出的内容装成一个jQuery对象,想放哪里就放哪里。

success : function(data, status) {
.....something.....
var myobject=$("<object>......</object>");
myobject.appendTo($("#divid"));
}
Go 旅城通票 2011-07-22
  • 打赏
  • 举报
回复
不能直接document.write,要不会覆盖当前页面的内容,因为当前页面的文档流已经关闭了

设置容器的innerHTML。

52,797

社区成员

发帖
与我相关
我的任务
社区描述
Web 开发 Ajax
社区管理员
  • Ajax
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧