在JavaScript中创建SOAP XMLHttpRequest请求

时间:2018-06-18 20:37:59

标签: javascript soap xmlhttprequest

我试图在JavaScript中创建SOAP请求,但是我得到了错误的响应。

这是我的要求:

callSOAP() {
    var xmlhttp = new XMLHttpRequest();
    xmlhttp.open('POST', 'https://webapi.allegro.pl/service.php', true);
    var sr = 
    '<?xml version="1.0" encoding="utf-8"?>' +
    '<SOAP-ENV:Envelope ' + 
        'xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" ' + 
        'xmlns:main="https://webapi.allegro.pl/service.php" ' +
        'xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" ' +
        'xmlns:xsd="http://www.w3.org/2001/XMLSchema">' +
        '<SOAP-ENV:Body>' +
            '<main:DoGetCountriesRequest>' +
                '<main:countryCode>1</main:countryCode>' +
                '<main:webapiKey>xxxxxxxx</main:webapiKey>' +
            '</main:DoGetCountriesRequest>' +
        '</SOAP-ENV:Body>' +
    '</SOAP-ENV:Envelope>';

    xmlhttp.onreadystatechange = function () {
        if (xmlhttp.readyState == 4 && xmlhttp.status == 200) {
            console.log(xmlhttp.response);
        }
    };
    xmlhttp.setRequestHeader('Content-Type', 'text/xml');
    xmlhttp.send(sr);
}

我试着打电话给DoGetCountriesRequest&#39;方法,但响应是状态代码500,并带有消息&#39;无效的XML&#39;。

这是在JavaScript中调用SOAP方法的正确方法吗?我的要求有什么问题?

1 个答案:

答案 0 :(得分:0)

您似乎将请求发送到?wsdl端点 - 从xmlhttp.open()方法调用中的网址中删除该请求,然后将其发送到服务本身。

您的SOAP消息似乎也格格不入 - 您过早关闭了SOAP-ENV:Envelope开头标记 - 它还需要包围您的xmlns:xsixmlns:xsd命名空间定义:

'<?xml version="1.0" encoding="utf-8"?>' +
    '<SOAP-ENV:Envelope ' + 
        'xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:main="https://webapi.allegro.pl/service.php"' +
        'xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" ' +
        'xmlns:xsd="http://www.w3.org/2001/XMLSchema">' + ...

跟进编辑 您的countryCode和webapiKey开头标记中有一些双引号需要删除,看起来消息本身不符合WSDL - WSDL中的操作doGetCountries需要DoGetCountriesRequest个对象。尝试类似:

var sr = 
    '<?xml version="1.0" encoding="utf-8"?>' +
    '<SOAP-ENV:Envelope ' + 
        'xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" ' + 
        'xmlns:main="https://webapi.allegro.pl/service.php" ' +
        'xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" ' +
        'xmlns:xsd="http://www.w3.org/2001/XMLSchema">' +
        '<SOAP-ENV:Body>' +
            '<main:DoGetCountriesRequest>' +
                '<main:countryCode>1</main:countryCode>' +
                '<main:webapiKey>xxxxxxxx</main:webapiKey>' +
            '</main:DoGetCountriesRequest>' +
        '</SOAP-ENV:Body>' +
    '</SOAP-ENV:Envelope>';