2015-05-09 58 views
0

我已经做了彻底搜查,但是我无法找到明确的关于我的假设我。以前用过下面的代码:

<?php 
session_start(); 
if (isset($_SESSION['valid_user']) && $_SESSION['from']==1) 
{ 
?> 
    <script type="text/javascript"> 
     $.ajax({ 
     method:"POST", 
     dataType: 'json', 
     url:"user.php", 
     success: function(newdata) { 
      if (newdata == "nothing") 
      { 
       var temp1 ="no data!"; 
       $("#results_ribbon").text(temp1);    
       return; 
      } 
      var temp1 ="You have: ".concat(newdata); 
      $("#results_ribbon").text(temp1); 
     } 
    }); 
    </script>  

这是一个PHP文件的一部分。它建立在上面的代码后的DOM如下的HTML代码...

所以,我期望的div id为“results_ribbon”不要有因为#正确的内容results_ribbon不存在,但是,一切正常,这导致我假定$ .ajax调用等待DOM加载后执行,我是对吗?如果不是为什么会发生上述情况?

+1

.ajax和.ready是两个不同的函数,ajax执行ajax请求,准备好在DOM完全加载时执行函数。它可以工作,因为ajax请求需要时间才能完成(它的异步),所以DOM有时间加载。如果向ajax选项添加'async:false',则应该失败 –

+0

在调用'.ready()'之前需要等待“$ .ajax()'完成吗? – guest271314

回答

1

不,这是不正确的。实际的Ajax请求在您打电话后立即开始。 但是,当获得服务器响应时,成功回调将在一段时间后触发。 到那时你已经在DOM中加载了#results_ribbon。

+0

因此,我不能依赖它,并且确信我必须使用.ready,不是吗? –

+1

是的,只需在$(function(){// your code})中包装你的ajax调用; 。它是$(document).ready()的片段; –

1

Ajax请求不会立即返回结果,有延迟。此延迟可能或可能不是足够长,以便您的“results_ribbon”div被创建。

可以肯定,只需在$(document).ready中简写为$(function(){ (...) });的ajax调用即可。