我想使用 javascript 来使用 cdyne 提供的网络天气服务。 这是我的代码:
<html>
<head>
<title>weather app</title>
</head>
<body>
<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.7.1/jquery.min.js"></script>
<script language="JavaScript">
function CallService() {
var DTO = "{ 'ZIP': '85281' }";
$.ajax({
type: "POST",
url: "wsf.cdyne.com/WeatherWS/Weather.asmx/GetCityWeatherByZIP",
data: JSON.stringify(DTO),
contentType: "application/json; charset=utf-8",
dataType: "json",
processData: true,
success: function (msg) {
alert(msg);
},
error: function (req, status, error) {
alert(req + "# " + status + "@ " + error);
},
complete: function (req, status) {
alert(req + "% " + status);
}
});
}
CallService();
</script>
</body>
</html>
当我运行代码时,它在警报中显示 [object Object]#error@ 和 [object Object]%error,这意味着 error: function() 和 complete: function 而不是 success: function()叫。有没有人使用 javascript 来消费这个天气服务? 任何帮助将不胜感激。
最佳答案
这里有几个问题:
您的网址应以
http://
开头。没有它,您拥有的 URL 将相对于代码所在的文档进行解析。您在 POST 中发送 JSON。服务不希望收到包含 JSON 的 POST 的可能性非常高。
您期待服务返回 JSON ,但它似乎以 XML 回复。
您正在尝试执行跨域调用,但 Same Origin Policy 阻止了该调用,并且您尝试使用的服务似乎不支持 Cross Origin Resource Sharing . (当我尝试解决上述问题时,我收到错误消息,指出不允许来 self 的来源 [这是
http:/jsbin.com
] 的跨域请求)。
查看 service description对于您尝试使用的页面,它看起来不支持 JSON-P , 这意味着您不能从不同的域使用它。您必须使用服务器端进程来查询它。
关于javascript - 在 javascript 中使用网络天气服务,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15451614/