gpt4 book ai didi

javascript - 由从 $(document).ready 调用的函数创建,未呈现
转载 作者:太空狗 更新时间:2023-10-29 13:27:27 26 4
gpt4 key购买 nike

在我整理的示例中,我需要:

  1. 在 $(document) 中使用 jquery POST。准备好获取我稍后使用的“票”
  2. 发布成功后,调用另一个函数(“AddTicketAndRender()”)并传入该票证
  3. 在 AddTicketAndRender() 中,将 HTML 模板中的占位符值替换为传入的票证。HTML 模板定义了我需要呈现的对象。
  4. 将 HTML 模板添加到正文并呈现:

    function addTicketAndRender(incomingTicket){

    //For now, just touch the spinner, don't worry about the ticket.
    var template = $('#tableauTemplate').html(),
    filledTemplate = template.replace('{placeholder}','yes');


    $('body').append( filledTemplate );}

我在 jsfiddle 中工作:

http://jsfiddle.net/vm4bG/4/

但是,当我将 HTML 和 JavaScript 组合到一个 htm 文件中时,我想要的可视化效果并没有在 Chrome、IE 或 Firefox 中呈现。

这是无法正常工作的 HTM 的完整源代码。任何人都可以看到明显错误的东西吗?我的标记和脚本在下方和/或此处:http://tableau.russellchristopher.org:81/rfc1.htm

<html>
<head>
<script type="text/javascript" src="http://public.tableausoftware.com/javascripts/api/viz_v1.js"></script>
<script type="text/javascript" src="http://code.jquery.com/jquery-1.7.2.min.js"></script>
</head>

<!-- template code follows -->
<script type="text/template" id="tableauTemplate">

<div class="tableauPlaceholder" id="tableauPlaceholder" style="width:654px; height:1469px;background-image: url('http://tableau.russellchristopher.org:81/Background.gif'); top: 0px; left: 0px; width: 100%; margin-left: 76px;">
<object class="tableauViz" width="654" height="1469">
<param name="host_url" value="http%3A%2F%2Fpublic.tableausoftware.com%2F"/>
<param name="site_root" value="" />
<param name="name" value="AnalyticsIncJavaScript&#47;AnalyticsInc" />
<param name="tabs" value="no" />
<param name="toolbar" value="yes" />
<param name="static_image" value="tableau.russellchristopher.org:81/Background.gif"/>
<param name="animate_transition" value="yes" />
<param name="display_static_image" value="yes" />
<param name="display_spinner" value="{placeholder}" id="display_spinner" />
<param name="display_overlay" value="yes" />
<param name="display_count" value="yes" />
</object>
</div>
</script>
<!-- end of template -->

<body>
<script>
function addTicketAndRender(incomingTicket){

// grab tableau template code and replace ticket placeholder with incomingTicket from $.post
console.log("Add and Render");

//For now, just touch the spinner, don't worry about the ticket.
var template = $('#tableauTemplate').html(),
filledTemplate = template.replace('{placeholder}','no');


$('body').append( filledTemplate );
console.log(incomingTicket);
console.log("Appended.");

}

$(document).ready(function() {
console.log("ready");
var trustedURL = "http://tableau.russellchristopher.org/trusted",
userName = "foo",
serverURL = "http://tableau.russellchristopher.org/";


$.post(trustedURL, {
username: userName,
server: serverURL,
client_ip: "",
target_site: ""
}, function(response) {
addTicketAndRender(response);
});


});

</script>


</body>

</html>

在成功函数中对 console.log 的调用正在记录正确的信息 - 所以我知道我到达了我需要的地方 - 但对象似乎没有做它需要做的事情。

最佳答案

仅供引用,您的 tableau.russellchristopher.org 链接无效。我也不知道您将如何在 jsfiddle 中使用它——我在尝试时遇到跨源错误。

  1. 一个明显的问题是包含模板的脚本元素位于 </head> 之间的下方区域和 <body> .放在里面body .

  2. 以下是我认为可能发生的情况:看起来 Tableau JavaScript API 已设置为处理 object.tableauViz DOMContentLoaded 时的元素或 load火灾。您正在插入 <object>在异步请求的回调中标记到文档中。所以我认为加载事件正在触发,Tableau API 在您的 <object> 之前进行初始化。标记被插入到文档中。

    也许为这些事件注册你自己的监听器并调用console.log()查看它们是否在您的 $.post 之前执行回调。

    不幸的是,createVizesAndStartLoading()执行初始化的方法(例如从文档中检索 object.tableauViz 元素)似乎不可访问。看起来您可以通过调用 window.tableau.createViz() 添加您的元素, 但不幸的是 createVizesAndStartLoading()进行一些您需要复制或放弃的预处理(例如设置 width/height 值)。

同步检索模板

试试这个而不是你的 $.post() :

$.ajax( {

url : trustedURL,

data : {

username : userName,

server : serverURL,

client_ip : "",

target_site : ""

},

async : false

} ).done( addTicketAndRender );

关于javascript - <object> 由从 $(document).ready 调用的函数创建,未呈现,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10758376/

26 4 0