如何对在线web服务进行Ajax调用

How to make an Ajax call to an online web service?

本文关键字:Ajax 调用 服务 web 在线      更新时间:2023-09-26

我想用jQuery Ajax调用一个在线web服务。但我无法得到一个成功的回应。我很困惑为什么它会给我一个错误。

        var webMethod = "http://www.w3schools.com/webservices/tempconvert.asmx/CelsiusToFahrenheit?callback=?";
         var soap ='<soap:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">  <soap:Body>     <CelsiusToFahrenheit xmlns="http://tempuri.org/"> <Celsius>12</Celsius> </CelsiusToFahrenheit>   </soap:Body> </soap:Envelope>';
        $j.ajax({
              type: "POST",
              url :webMethod,
              data: soap,
               dataType :"xml",
              contentType:"text/xml; charset='"utf-8'"",
              cache:false,
              async: false,
            error:function(resp)
            {
                alert("Error :"+$j.parseXML(resp));
            },
        }).done(function(response){
                console.log(response);
                var xmlData =$j(response).find('FahrenheitToCelsiusResult').text();
                alert(xmlData);
            }); 
    });

由于某些原因,我不能去w3schools。

您正在尝试将响应解析为XML,但正在进行JSONP调用。如果您是从www.w3schools.com以外的任何网站发出请求,则由于同源策略,您有问题。

所以你可以从JavaScript消费这个web服务的唯一方法是,如果他们实现CORS头,你不使用ie9或更低(jQuery不实现CORS在他们的ajax请求ie9或更低)。

如果网站根本没有CORS标头,那么你可以安装forcecors插件。安装后选择视图=>工具栏=>插件栏,并在屏幕的右上角点击"cors"文本。现在你可以从任何地方到任何地方发出XHR请求,但因为你需要安装插件才能工作,所以它只适合测试和摆弄,因为你不能指望你的网站用户已经安装并激活了这个插件。

您还需要删除?callback=,否则jQuery将把您的请求视为JSONP,并将失败,因为它得到一个xml响应。