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

时间:2013-06-02 10:34:19

标签: javascript ajax jquery jquery-mobile

我想对在线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);
            }); 

    });

1 个答案:

答案 0 :(得分:0)

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

您正在尝试将响应解析为XML但是进行JSONP调用。如果您是从www.w3schools.com以外的任何网站提出请求,那么由于same origin policy.

您遇到了问题

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

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

您还需要删除?callback =或者jQuery会将您的请求视为JSONP,并且会因为获得xml响应而失败。