【发布时间】:2013-03-18 07:43:01
【问题描述】:
我正在尝试创建一个连接到此 Web 服务的基本 HTML 页面: http://wsf.cdyne.com/WeatherWS/Weather.asmx 经过数小时修补教程和代码示例后,我完全不知道为什么这不起作用。 (我的请求收到 404,或者根本没有状态..)这是扩展演示的一部分,该演示已经使用 Soap 连接到类似的 Web 服务,教授的示例与嗯..
我的代码如下:
xmlHttpObj.open("POST", "http://wsf.cdyne.com/WeatherWS/Weather.asmx", true);
xmlHttpObj.setRequestHeader("Content-Type", "text/xml");
xmlHttpObj.setRequestHeader("SOAPAction", "http://ws.cdyne.com/WeatherWS/GetCityForecastByZIP");
var envelope = '<?xml version="1.0" encoding="utf-8"?> \n' +
'<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> \n' +
' <GetCityForecastByZIP xmlns="http://ws.cdyne.com/WeatherWS/"> \n' +
' <ZIP>' + selectedZip + '</ZIP> \n' +
' </GetCityForecastByZIP> \n' +
' </soap:Body> \n' +
'</soap:Envelope> ';
xmlHttpObj.onreadystatechange = UseResultsCallBack;
xmlHttpObj.send(envelope);
xmlHttpObj 是一个有效的 xmlHttpRequest 对象,selectedZip 是一个邮政编码。这都是客户端代码,所以可能存在某种跨域问题,但我不认为这是这种情况下的问题......
【问题讨论】:
-
此页面是否托管在
wsf.cdyne.com上?如果不是,那么你有一个跨域问题(特别是同源策略) -
提示:我从来没有在 ajax 请求中使用绝对 url。始终使用相对 url 并让浏览器设置域名。我还用健全的脚本检查了这一点。结果是它抓住了初级程序员试图发出跨域 ajax 请求。
-
它不会(也不会)托管在任何地方,只是在我的笔记本电脑上运行。并且通过相对url,你的意思是我应该在请求标头中设置主机,然后在open方法中设置url相对吗?我有类似的东西,但它仍然无法解决任何问题。如果这是一个跨域问题,我将如何解决它?浏览器会将 kabosh 放在调用中吗?
-
否,在请求头中设置主机将不起作用。该页面必须托管在与 ajax 请求源相同的域上,否则它将无法通过同源策略检查。所以是的,这是一个跨域问题。让我把你的选择放在一个答案中。
标签: javascript ajax soap