等待$ .get调用的页面在恢复执行回调函数之前完成执行

时间:2011-06-27 09:58:21

标签: jquery ext.net

我们希望实施创新的用户界面。实际上我们正在做的事情如下:

  • 当用户点击菜单项链接时,会调用$ .get(url),我们将提取网址中引用的页面的HTML内容。
  • 然后我们获取该内容并将其填充到输出div中,在填充之前,我们删除该输出div的任何内容。

这是我们实际所做工作的简化版本,但它的目的是说明我目前面临的问题。

实际上,当使用$ .get(url)提取的页面包含纯HTML时,我没有问题。但是,如果使用$ .get(url)提取的页面包含Ext.NET代码,那么我不会返回任何内容。

实际上,Ext.NET代码本身正在调用其他脚本并在DOM中插入元素。这导致了一个问题,因为我的代码执行转到回调函数之前 Ext.NET有时间插入我试图访问的内容。

因此,解决此问题的一个天真的尝试是等到Ext.NET完成填充页面然后将代码执行返回到回调函数。问题是我该怎么做?实际上有没有更好的方法来实现我想要做的事情,即确保$ .get(url)完全运行它以便我的输出div正确填充?

我想我可以沿着使用iFrame的路线走下去,但我想尽可能避免这种情况,因为这会增加已经很复杂的界面的复杂性。

2 个答案:

答案 0 :(得分:1)

提取由渲染的Ext.NET组件生成的html应该是可能的,虽然我认为你会错过另一个重要的方面......附加到每个组件的DOM事件。

您需要的是在原始有效负载PLUS中发送的任何html以及用于生成页面的JavaScript,您需要在父页面上执行该JavaScript。只是带来html并不会让你受益匪浅。

如果您在父页面上运行Ext.NET,则可能需要使用任何Container类型上的可用功能进行调查。基本功能是获取远程页面/ html +脚本并执行该脚本。

以下示例演示。

示例

<ext:Panel runat="server" Title="Example">
    <AutoLoad Url="example.html" /> 
</ext:Panel>

希望这有帮助。

答案 1 :(得分:0)

您需要使用

async: false,

这样的电话也是如此..

$.ajax({
  type: "GET", // Don't need to declare this..
  url: 'url.html',
  async: false,
  success: function(data) {
     // Do something with the returned data..
  }
});