如何让document.write和ajax玩得好听?

时间:2013-08-27 21:01:55

标签: javascript ajax jquery-mobile

我的编程技巧充其量只是基本的,所以如果我听起来有点笨拙讨论这些事情,请原谅我。我正在学习,但是以黑猩猩的速度学习。

这是我的问题:我正在使用JQuery Mobile通过ajax将一些表单内容作为对话框引入。此内容包含在文档本身中,在第二个div中包含data-role =“page”属性。

在第二页div中,我有一些定义了几个vars的javascript,然后用document.write()将它们写入doc。

然而,当我点击链接(导航中的最右边的链接)时,Firefox不是弹出一个不错的对话框,而是短暂地加载一个带有第一个var的新页面(不是动态的,而是作为静态页面),然后重定向回起始页面,在浏览器历史记录中留下“wyciwyg(00000)...”。根据所述重定向,“WYCIWYG”将显示在浏览器的标题栏中。其他浏览器以略微不同的方式窒息(Safari不重定向,Chrome显示所有变量并且不重定向等),但WYCIWYG在历史中的因素在所有三个中都有效。如果删除document.write命令,则链接将按预期运行。

我已经在网上搜了好几个小时而没有找到答案......类似的问题出现在10年前的Mozilla错误报告中,但并不多。我发现的唯一解决方案是不在通过ajax加载的内容中使用document.write()。不幸的是,我不知道替代方案是什么,或者我将如何开始执行它。 Javascript代码源自Google - 转机计划程序的前端代码。

下面是一些说明问题的精简代码。考虑到整个黑猩猩的节奏,任何指导都会非常感激。提前谢谢。

<!DOCTYPE HTML>
<html>
<head>

<title>WYCIWYG</title> 
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> 
<link rel="stylesheet" href="http://code.jquery.com/mobile/1.2.1/jquery.mobile.structure-1.2.1.min.css" />
<script type='text/javascript' src='http://code.jquery.com/jquery-1.7.1.js'></script>
<link rel="stylesheet" type="text/css" href="http://code.jquery.com/mobile/1.2.1/jquery.mobile-1.2.1.min.css">
<script type='text/javascript' src="http://code.jquery.com/mobile/1.2.1/jquery.mobile-1.2.1.min.js"></script>

<script>

var startExample = "USC";
var endExample = "201 N Los Angeles St.";
var zip = "90012";

</script>
</head>

<body>
<div data-role="page">
<div data-role="navbar">

<ul data-mini="true">
<li><a href="#mNavDash" data-prefetch="true" id="dashLink">Service 1</a></li>
<li><a href="#mNavCE" data-prefetch="true" id="ceLink">Service 2</a></li>
<li><a href="#planTrip" id="planTripLink" data-rel="dialog">PLAN TRIP</a></li>
</ul>
</div>

</div>
<div data-role="page" id="planTrip">
Some document.write js:
<script>
document.write(startExample);
document.write(endExample);
document.write(zip);
</script>
</div>
</body>

1 个答案:

答案 0 :(得分:0)

您可以在占位符元素上使用jQuery.html()

来源:http://jsfiddle.net/fiddlegrimbo/suD6s/6/

演示:http://fiddle.jshell.net/fiddlegrimbo/suD6s/6/show/light/

<div data-role="page" id="planTrip">
Some document.write js:
<p id="start"></p>
<p id="end"></p>
<p id="zip"></p>
<script>
$("#planTrip #start").html(startExample);
$("#planTrip #end").html(endExample);
$("#planTrip #zip").html(zip);
</script>
</div>