0

重複の可能性:
jQuery:ajax呼び出しが成功した後にデータを返す

そのため、Sharepointサービスを呼び出して、他の場所で使用するためにいくつかの値を返そうとしています。そのためにウィンドウ変数を宣言しようとしています。単純に見えますが、ウィンドウ変数はresponseXML関数の外部では定義されていません。

userName = "";

var soapEnv =
"<soap:Envelope xmlns:soap='http://schemas.xmlsoap.org/soap/envelope/' xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance' xmlns:xsd='http://www.w3.org/2001/XMLSchema' xmlns:tns='http://schemas.microsoft.com/sharepoint/soap/'> \
    <soap:Body> \
        <GetUserProfileByName xmlns='http://microsoft.com/webservices/SharePointPortalServer/UserProfileService'> \
            <AccountName></AccountName> \
        </GetUserProfileByName> \
    </soap:Body> \
</soap:Envelope>";

$.ajax({
    url: "/_vti_bin/userprofileservice.asmx",
    type: "POST",
    dataType: "xml",
    data: soapEnv,
    complete: processResult,
    contentType: "text/xml; charset='utf-8'"    
});

function processResult(xData, status) {
    $(xData.responseXML).find("PropertyData > Name:contains('FirstName')").each(function() {
        window.FirstName = $(this).parent().find("Values").text();
    });

    $(xData.responseXML).find("PropertyData > Name:contains('LastName')").each(function() {
        window.LastName = $(this).parent().find("Values").text();
    });

}

    userName += window.FirstName;
    userName += " " + window.LastName;
    console.log(userName);
4

2 に答える 2

0

AJAX 呼び出しが完了する前ににアクセスしようとしていますwindow.FirstNamewindow.LastNameそれをコールバック関数内に配置する必要があります。

function processResult(xData, status) {
    $(xData.responseXML).find("PropertyData > Name:contains('FirstName')").each(function() {
        window.FirstName = $(this).parent().find("Values").text();
    });

    $(xData.responseXML).find("PropertyData > Name:contains('LastName')").each(function() {
        window.LastName = $(this).parent().find("Values").text();
    });

    userName += window.FirstName;
    userName += " " + window.LastName;
    console.log(userName);

}
于 2012-11-09T19:01:42.643 に答える
0

非同期呼び出しは、実行の順序を変更します。processResult will be called after window.FirstName; and window.LastName; is assigned to userName,processResult 本体が実行される前に定義されている場合、window.FirstName が使用可能であることを示すアラートを呼び出すことによって、シーケンスを描写しようとしました。

window.FirstName = "First Name: Assigned before ajax call";
window.LastName = "Last Name: Assigned before ajax call";

function processResult(xData, status) {
    $(xData.responseXML).find("PropertyData > Name:contains('FirstName')").each(function() {
        window.FirstName = $(this).parent().find("Values").text();
    });

    $(xData.responseXML).find("PropertyData > Name:contains('LastName')").each(function() {
        window.LastName = $(this).parent().find("Values").text();
    });

   userName += window.FirstName;
   userName += " " + window.LastName;
   alert("After ajax response UserName: " + userName);    
}

userName += window.FirstName;
userName += " " + window.LastName;
alert("Before ajax response UserName: " + userName);
于 2012-11-09T19:09:09.170 に答える