页面加载时运行多个ajax

时间:2014-04-15 15:37:40

标签: javascript html ajax servlets

我写了三个ajax函数,如下所示:

function showClass()
{
    ...
    var url="getObjectProperty?"
    ....
}
function showDtPro()
{
    ...
    var url="getDataTypeProperty?"
    ....
}
function showObjPro()
{
  xmlHttp=GetXmlHttpObject();
  if (xmlHttp==null)
  {
     alert ("Your Browser Don't support AJAX");
     return;
  }
  var url="getObjectProperty?";
  url=url+"sid="+Math.random();
  xmlHttp.onreadystatechange=loadObjPro;
  xmlHttp.open("GET",url,true);
  xmlHttp.send(null);
}

除了“url”不同之外,其他东西都是相同的。这个ajax用于从三个不同的servlet获取数据并更新html中的标记。 其中一个servlet如下:

 //This function is used to get the data from an jena model and response the data to the client.
 protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    // TODO Auto-generated method stub
    request.setCharacterEncoding("utf-8");
    //
    ArrayList<String> ObjectPropertyNames=new ArrayList<String>();
    //Define the jenaOwlModel 
    JenaOWLModel jenaOwlModel;
    try {
        OntModel ontmodel=MyModelFactory.getJenaModel().getOntModel();

        ExtendedIterator ObjectProperties = ontmodel.listObjectProperties();
        while(ObjectProperties.hasNext()){
            ObjectProperty property = (ObjectProperty) ObjectProperties.next();
            if(property.getLocalName()!=null)
            {
                ObjectPropertyNames.add(property.getLocalName());
            }
        }   
        } catch (Exception e1) {
        // TODO Auto-generated catch block
        e1.printStackTrace();
    }         
            response.setCharacterEncoding("utf-8");  
    PrintWriter out = response.getWriter(); 
            String AllObjectProperties="";
        for(int i=0;i<ObjectPropertyNames.size();i++)
        {                    AllObjectProperties=AllObjectProperties+ObjectPropertyNames.get(i)+"#";
        }
        System.out.print(AllObjectProperties);
        out.print(AllObjectProperties);  
        out.flush();  
        out.close();
}

另一个servlet与这一个几乎相同。现在我想在加载页面时从三个servlet加载数据。所以我在windows.onload函数中编写如下:

window.onload=function()
{
   showClass();
   showObjPro();
   showDtPro();
 }

但它没有按预期运行。有时,只有最后一个函数showDtPro();才能获取数据。另外两个函数不会获取数据。有时,标记应由showClass()更新,showObjPro()显示数据来自showDtPro()

 <div id="class">
   <h4>Class</h4>
     <ul id="rdfclass" type="dclass"></ul> 
</div> 
<div id="obj">
     <h4>Object Property</h4>
     <ul id="rdfobjpro" type="dobjpro"></ul>
  </div>  
<div id="dt">
     <h4>Datatype Property</h4>
     <ul id="rdfdtpro" type="dtpro"></ul>  
</div> 

html标签在上面。相应地,这三个函数用于更新三个<ul>标记。 我是网络开发的初学者。我希望得到你的帮助!谢谢!

1 个答案:

答案 0 :(得分:0)

那是因为ajax是异步的。你必须实现一些回调等。

在ajax的情况下执行不同步。