2010-03-16 68 views
0

我想在页面加载时使用来自ajax调用的XML响应填充变量,以便在keyup上我可以通过该列表进行过滤,而无需重复获取请求(认为非常简单自动完成)。我遇到的麻烦似乎与变量范围有关,但我对js/jQuery相当陌生,所以我不太确定。从Sharepoint列表Web服务返回并保存XML对象

以下代码不会对密钥进行任何操作,并向它添加警报,告诉我它正在执行关键字上的leadResults(),并且该变量正在返回XML响应对象,但它看起来是空的。奇怪的是,如果我将leadResults()呼叫转移到getResults()函数中,UL就会正确填充结果。

我在这边撞墙,请帮忙!

var resultsXml; 

$(document).ready(function() { 
    var leadLookupCaml = 
     "<Query> \ 
      <Where> \ 
       <Eq> \ 
        <FieldRef Name=\"Lead_x0020_Status\"/> \ 
        <Value Type=\"Text\">Active</Value> \ 
       </Eq> \ 
      </Where> \ 
     </Query>" 

    $().SPServices({ 
        operation: "GetListItems", 
        webURL: "http://sharepoint/departments/sales", 
        listName: "Leads", 
        CAMLQuery: leadLookupCaml, 
        CAMLRowLimit: 0,      
        completefunc: getResults  
       }); 

}) 

$("#lead_search").keyup(function(e) { 

leadResults(); 

}) 



function getResults(xData, status) { 
resultsXml = xData; 

} 

function leadResults() { 
xData = resultsXml; 
    $("#lead_results li").remove(); 
    $(xData.responseXML).find("z\\:row").each(function() { 

     var selectHtml = 
      "<li>" 
      + "<a href=\"http://sharepoint/departments/sales/Lists/Lead%20Groups/DispForm.aspx?ID=" + $(this).attr("ows_ID") + ">" + $(this).attr("ows_Title")+" : " + $(this).attr("ows_Phone") + "</a>\ 
      </li>"; 
     $("#lead_results").append(selectHtml); 



    }); 
} 

回答

0

经过证明阅读我的提交后,它是非常明显的! ajax调用需要同步进行。将async设置为false保存了一天!