0
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
    <title></title>

<script src="http://code.jquery.com/jquery-1.7.2.min.js" type="text/javascript"></script>

<script type="text/javascript">

    $(document).ready(function () {

        var Celcius = 0;
        $.ajax({
            type: "POST",
            url: "http:\//www.w3schools.com/webservices/tempconvert.asmx/CelsiusToFahrenheit",
            contentType: "application/x-www-form-urlencoded",
            data: 'Celsius=0',
            dataType: "text/html",
            success: function (msg) {
                alert(msg);
            },
            error: function (xhr, msg) {
                alert('fail');
            }
        });

    });

</script>
</head>
<body>

</body>
</html>

将上面的页面保存为桌面上的 .htm。如果您在浏览器中打开该页面,它会显示“失败”消息。但是如果你签入提琴手,调用实际上是成功的。在 fiddler 中,您还可以看到响应正确地给出了 32 作为答案(Web 服务将 0 摄氏度转换为 32 华氏度)。这在我的桌面上工作了一段时间,然后突然停止工作!

对于那些使用过提琴手的人。这是从提琴手监控的响应

HTTP/1.1 200 OK
Date: Thu, 05 Apr 2012 23:18:10 GMT
Server: Microsoft-IIS/6.0
MicrosoftOfficeWebServer: 5.0_Pub
X-Powered-By: ASP.NET
X-AspNet-Version: 4.0.30319
Cache-Control: private, max-age=0
Content-Type: text/xml; charset=utf-8
Content-Length: 87

<?xml version="1.0" encoding="utf-8"?>
<string xmlns="http://tempuri.org/">32</string>

有任何想法吗?

更新:伙计们,网址http://www.w3schools.com/webservices/tempconvert.asmx/CelsiusToFahrenheit是一种网络方法。您无法通过浏览器直接访问它。如果您想通过浏览器发出请求,您可以使用http://www.w3schools.com/webservices/tempconvert.asmx?op=CelsiusToFahrenheit

请仅在您有使用 jquery ajax 调用 Web 服务的经验时回复。

4

3 回答 3

1

它失败了,因为您违反了同源政策

浏览器成功发出请求,但由于该请求没有您的站点查看数据的权限,它不允许您的 JavaScript 访问它。

这显示在浏览器的 JavaScript 控制台中。例如

XMLHttpRequest 无法加载http://www.w3schools.com/webservices/tempconvert.asmx/CelsiusToFahrenheit。Access-Control-Allow- Originhttp://fiddle.jshell.net不允许 Origin。

于 2012-04-05T23:03:11.803 回答
1

在托管 html 文件的文件夹中托管 jquery。您对 jquery 的引用将是这样的(而不是 Web 引用)。这足以克服同源政策的实施。

 <script src="Scripts/jquery-1.4.1.min.js" type="text/javascript"></script>

您的示例仅适用于 Internet Explorer。正如其他用户正确指出的那样,它无法在 firefox 和 chrome 中运行的原因是由于 相同的原产地政策。您成功地从 Web 服务获得响应,但浏览器拒绝它。Fiddler 只是向您显示浏览器的流量(而不是浏览器对其执行的操作)。这可以解释为什么它似乎在提琴手中工作。

您可以在此处找到绕过相同来源政策的方法。

于 2012-04-07T21:00:50.397 回答
1

您的 ajax 调用应该在域内。再次查看上面指出的更正http://

于 2012-04-05T23:01:33.293 回答