0

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

        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);
            }); 

    });
4

1 回答 1

0

我不能去w3schools,因为它在中国因为某种原因被封锁了。

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

因此,您可以从 JavaScript 使用此 Web 服务的唯一方法是,如果它们实现了 CORS 标头并且您没有使用 IE 9 或更低版本(jQuery 不会在其对 IE 9 或更低版本的 ajax 请求中实现 cors)。

如果该站点根本没有 CORS 标头,那么您可以为 Firefox 安装 forcecors 插件。安装后选择视图 => 工具栏 => 插件栏,然后在屏幕的右上角单击“cors”文本。现在您可以从任何地方到任何地方发出 XHR 请求,但是由于您需要安装插件才能使其工作,因此它仅适用于测试和摆弄,因为您不能指望您网站的用户安装并激活该插件。

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

于 2013-06-02T11:14:14.807 回答