javascript嵌入函数和嵌入变量作用域

javascript嵌入函数和嵌入变量作用域,javascript,jquery,scope,Javascript,Jquery,Scope,我正在编写一个小应用程序,它将使用jQueryAjax调用对第三方API进行SOAP调用。我想使下面的函数成为泛型函数,但在doneajax方法的最内层函数中遇到了变量范围问题。这个函数就是返回好东西的地方。我希望将键、值对放置在传递到APICall函数的结果对象中,但我不知道如何在下面引用它 我想我不能修改“完成”部分中的函数参数列表,可以吗?我只是尝试将传入的结果添加到done函数中,没有语法问题,但它不起作用 想法 function APICall(method, username, pa

我正在编写一个小应用程序,它将使用jQueryAjax调用对第三方API进行SOAP调用。我想使下面的函数成为泛型函数,但在doneajax方法的最内层函数中遇到了变量范围问题。这个函数就是返回好东西的地方。我希望将键、值对放置在传递到APICall函数的结果对象中,但我不知道如何在下面引用它

我想我不能修改“完成”部分中的函数参数列表,可以吗?我只是尝试将传入的结果添加到done函数中,没有语法问题,但它不起作用

想法

function APICall(method, username, password, payload, result) {
    var wsUrl = "https://localhost.my.company.org/API/Service.asmx";

    var soapRequest = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n"
            + "<soap:Envelope \n"
            + "    soap:encodingStyle=\"http://schemas.xmlsoap.org/soap/encoding/\" \n"
            + "    xmlns:soap=\"http://schemas.xmlsoap.org/soap/envelope/\" \n"
            + "    xmlns:soapenc=\"http://schemas.xmlsoap.org/soap/encoding/\" \n"
            + "    xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" \n"
            + "    xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\"> \n"
            + "  <soap:Body> \n"
            + "    <__METHOD__ xmlns=\"http://THIRD-PARTY.API.Web.Service/\"> \n"
            + "      <UserName>__USERNAME__</UserName> \n"
            + "      <Password>__PASSWORD__</Password> \n"
            + "      __PAYLOAD__ \n" + "    </__METHOD__> \n"
            + "  </soap:Body> \n" + "</soap:Envelope>\n";

    soapRequest = soapRequest.replace(/__METHOD__/g, method);
    soapRequest = soapRequest.replace(/__USERNAME__/g, username);
    soapRequest = soapRequest.replace(/__PASSWORD__/g, password);
    soapRequest = soapRequest.replace(/__PAYLOAD__/g, payload);

    $.ajax({
            type : "POST",
            headers : {
                    SOAPAction : '"http://THIRD-PARTY.API.Web.Service/' + method + '"'
            },
            url : wsUrl,
            contentType : "text/xml",
            dataType : "xml",
            data : soapRequest,
            error : processAJAXError
     }).done(
            function(data, textStatus, jqXHR) {
                    $($.parseXML($(data).find(method + 'Result').text())).find(
                            'Data').each(
                            function(key, val) {
                                result[$(val).find('Room').text()] = $(val).find(
                                        'ID').text();
                                    console.log($(val).find('Room').text() + ' => '
                                            + $(val).find('ID').text());
                            });
             });
}
尝试绑定

.done(
    function(data, textStatus, jqXHR) {                  
        .
        .
        .

    }.bind(result));

由于AJAX是异步的,将KV对放在调用方的结果变量中不会有什么好处-该函数已经返回。您应该能够从done函数中访问结果变量,但正如Barmar所说,这可能对您没有帮助。请尝试将匿名函数与result.done函数绑定…{}.bindresult;我不知道您是否也可以绑定$.ajax.Ah!,我明白你说的异步行为是什么意思了。我的另一个代码是发出静态请求。我看到jQueryAjax有一个async=false设置。在这种情况下,这可能是最好的。谢谢