2011-04-05 112 views
5

因此,我从MVC3操作加载一些数据,返回Json,包含一些参数和内容作为字符串。我将内容添加到某个div。在部分视图中,我有一个document.ready JQuery事件。出于某种原因,该函数在添加内容之前执行,并且所有在ready函数中声明的选择器都是空的。

这是否有逻辑原因?我是否设置了超时选择器查看元素。但是超时可能非常不准确。

有什么建议吗?

谢谢!

示例代码小提琴:http://jsfiddle.net/aKxy7/

回答

0

我结束了编码的是等待,直到通过AJAX加载HTML所选元素已准备好方法。

+0

我知道这是一个旧的答案,但你能提供一个代码片段吗? – 2017-02-06 14:56:48

2

这听起来像你期望$(document).ready()火装载毕竟资产产生。这不是$(document).ready()的工作原理。它在DOM完成渲染时触发。而已。这听起来像你想使用$(window).load(),其中确实等到所有资产都加载。

+1

$(window).load()函数在AJAX请求中不会触发,因为我没有执行整页回发。 – 2011-04-05 17:53:59

+0

提示:$(window).load()从版本1.8弃用。 – robsch 2016-04-28 10:02:56

0

$(document).ready()当HTML!被加载。这意味着如果您的HTML加载了一些可以更改HTML DOM的JavaScript,那么在此之前会调用这些$(document).ready()

你应该确保你的函数最后被调用或使用setTimeout自称调用自己,直到你需要的元素全部被加载。

0

在$(document).ready函数可以调用jQuery的 $阿贾克斯或 $ .getJSON 从服务器上得到答案。然后你可以在你想要的地方注入json响应。没有的setTimeout需要

0

首先,

var elementIWannaGet = $('html-content-div'); 

应该

var elementIWannaGet = $('#html-content-div'); 

然而,你可能是什么更好做是分开的内容脚本,因为DOM已经加载...

考虑改变对此的响应:

{ result: true, 
    data: { id: '1' }, 
    elementId: '#html-content-div', 
    content: '<div id="html-content-div">Html content! :D</div>' 
} 

,然后改变你的contentLoaded处理程序如下:

function contentLoaded(response) { 
    if (response.result == true) 
     handleError(response); 

    // Get the container where the response.content will be rendered to. 
    var targetContainer = $('#target-container-id'); 

    // Append the content 
    targetContainer.append(response.content); 

    // Do something with your container 
    alert($(response.elementId).html().length); 
} 
相关问题