【问题标题】:IE Explorer 9 not rendering until after ajax/json function has completeIE Explorer 9 直到 ajax/json 函数完成后才会呈现
【发布时间】:2011-12-18 00:07:13
【问题描述】:

基本上我有这个代码。我试图简单地更新一个 div,但第一个 innerHTML 调用要么不起作用,要么永远不会在浏览器中呈现。

第二个确实有效,但一旦 ajax 调用完成,它会附加“完成”。我确定这与 ajax 调用有关,但我不明白为什么会发生这种情况,因为在 Firefox 中没有问题。有谁知道出了什么问题,或者firefox中是否有错误?为什么 IE 甚至会等待呈现 innerHTML 调用。不是应该在调用后立即更新 div 还是 IE 浏览器稍等片刻?

document.getElementById("status").innerHTML = '<div>Loading</div>';

$jQuery.ajax({
         type: "POST", 
         url: urlValue, 
         data: parameters, 
         cache: false,
         async: false, 
         dataType: "json"
});

document.getElementById("status").innerHTML = '<div>Complete</div>';

【问题讨论】:

  • 呃,你为什么要这样?正常回调有什么问题?
  • 这不是 100% 的代码。 $jQuery.ajax 调用实际上是在函数内部运行的,并且调用成功。回调与正在发生的错误无关。该文档未呈现在 ajax 调用之前进行的调用。

标签: javascript html ajax dom


【解决方案1】:

为什么不只是异步执行呢?

var status = $('#status');

status.html('<div>Loading</div>');

jQuery.ajax({
    type: "POST", 
    url: urlValue, 
    data: parameters, 
    cache: false,
    dataType: "json",
    success: function() {
        status.html('<div>Complete</div>');
    }
});

【讨论】:

  • 但是为什么这会影响 DOM 不渲染在 ajax 调用之前完成的东西呢?并且只在 IE 中?
  • @Ray:为什么不以正确的方式做事,因为 A(synchronus)JAX 的错误使用而忘记 IE 的行为?
【解决方案2】:

尝试在加载完成时执行这些代码。 可能在那个时候

document.getElementById("status").innerHTML = '<div>Loading</div>';

已执行的 DOM 尚未准备好访问它。

  1. 在 DOM 准备就绪时 - 放置“加载值”
  2. 发出 ajax 请求(“加载显示直到结束”)
  3. 一旦结束,设置“完成”

无论如何,在 DOM 准备好之前,您都无法更改它。除了 document.write,但它是另一回事。

可能会有帮助

setTimeout(function(){document.getElementById("status").innerHTML = '<div>Loading</div>';},0);

ajax post request ...

【讨论】:

  • 但这会破坏我想要做的事情的目的。我希望 div 在进行 ajax 调用时说“正在加载”。
  • 1.在 DOM 准备就绪 - 放置“加载值” 2. 发出 ajax 请求(“加载显示直到结束”) 3. 一旦结束,设置“完成”或者只是将“加载”放在服务器端。
  • 所有这一切都发生在 $jQuery(document).ready(function() 所以我不认为这是问题所在。另外,如果我删除了在 innerHTML 调用之后发生的 ajax 调用然后它会很好地附加到文档中。
  • 尝试使用 setTimeout(function(){...assign inner html}, 0);然后ajax调用。或者在 Timeout 函数中调用 ajax。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-27
  • 1970-01-01
相关资源
最近更新 更多