扫一扫
分享文章到微信
扫一扫
关注官方公众号
至顶头条
eclipse3.3+tomcat6.0+flex3.0
根据《Flex第一步》书中第十二章写了一个调用webservice(在线翻译)的例子
界面正常显示,但是点翻译按钮的时候就是没有反应。
大家帮忙看看什么原因。
代码如下:
<?xml version="1.0" encoding="gb2312"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute" creationComplete="initApp()">
<mx:Script>
<![CDATA[
import mx.rpc.events.ResultEvent;
internal function initApp():void{
var arr:Array = new Array();
arr.push({label:"中文--->英文",data:"ChineseTOEnglish"});
arr.push({label:"英文--->中文",data:"EnglishTOChinese"});
lang_select.dataProvider = arr;
}
internal function doSearch():void{
ws.Translate.send();
}
internal function resultHandler(evt:ResultEvent):void{
output_text.text = evt.result.toString();
}
]]>
</mx:Script>
<mx:WebService id="ws" wsdl="http://www.webservicex.net/TranslateService.asmx?wsdl" result="resultHandler(event)" showBusyCursor="true" useProxy="false">
<mx:operation name="Translate">
<mx:request>
<LanguageMode>{lang_select.selectedItem.data} </LanguageMode>
<Text>{input_text.text} </Text>
</mx:request>
</mx:operation>
</mx:WebService>
<mx:Panel x="57" y="10" width="481" height="380" layout="absolute" title="利用WebService实现在线翻译">
<mx:Label x="28" y="32" text="输入原文" width="92" height="31"/>
<mx:ComboBox x="254" y="30" id="lang_select"> </mx:ComboBox>
<mx:TextArea id="input_text" x="28" y="71" width="386" height="74"/>
<mx:Button x="28" y="168" label="开始翻译" click="doSearch()"/>
<mx:TextArea id="output_text" x="28" y="209" width="386" height="100"/>
</mx:Panel>
</mx:Application>
问题解决了,通过在 <mx:WebService id="ws" wsdl="http://www.webservicex.net/TranslateService.asmx?wsdl" result="resultHandler(event)" showBusyCursor="true" useProxy="false">里添加一个fault="Alert.show(event.fault.faultString,'Error')",
也就是 <mx:WebService id="ws" wsdl="http://www.webservicex.net/TranslateService.asmx?wsdl" result="resultHandler(event)" showBusyCursor="true" fault="Alert.show(event.fault.faultString,'Error')" useProxy="false">,当点击“开始翻译”按钮的时候,就提示“Security error accessing url”,由此可以判断出是跨域访问失败。
因此我找到WEB-INF/flex/proxy-config.xml文件,打开这个文件,添加如下内容
<destination id="mywebservice">
<properties>
<dynamic-url>
http://www.webservicex.net/*
</dynamic-url>
</properties>
</destination>
添加这段代码的目的就是让flash能访问http://www.webservicex.net/下的所有文件,这里的id我设置为mywebservice,那么在
<mx:WebService id="ws" wsdl="http://www.webservicex.net/TranslateService.asmx?wsdl" result="resultHandler(event)" showBusyCursor="true" fault="Alert.show(event.fault.faultString,'Error')" useProxy="false">里应该添加一个属性, destination="mywebservice",
因此mx:WebService的完整代码应为 <mx:WebService id="ws" wsdl="http://www.webservicex.net/TranslateService.asmx?wsdl" result="resultHandler(event)" showBusyCursor="true" fault="Alert.show(event.fault.faultString,'Error')" useProxy="false" destination="mywebservice">到此为止,所有的工作就做完了,然后运行页面,就可以正常访问了,不过这个在线翻译的webservice本身有问题,现在好像不提供这项功能了,因此会提示类似于“无法完成翻译,请和XXXXX邮箱联系”。
没关系,我在网上找了一个天气预报的webservice,经过测试是可以用的,具体的代码我贴出来吧,供大家学习。
页面代码如下:
<?xml version="1.0" encoding="gb2312"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute" creationComplete="initApp()">
<mx:Script>
<![CDATA[
import mx.rpc.events.ResultEvent;
import mx.controls.Alert;
internal function initApp():void{
var arr:Array = new Array();
arr.push({label:"北京",data:"北京"});
arr.push({label:"上海",data:"上海"});
lang_select.dataProvider = arr;
}
internal function doSearch():void{
ws.getWeatherbyCityName.send();
}
internal function resultHandler(evt:ResultEvent):void{
output_text.text = evt.result.toString();
}
]]>
</mx:Script>
<mx:WebService id="ws" wsdl="http://www.webxml.com.cn/WebServices/WeatherWebService.asmx?wsdl" fault="Alert.show(event.fault.faultString,'Error')" showBusyCursor="true" useProxy="false" destination="mywebservice">
<mx:operation name="getWeatherbyCityName" result="resultHandler(event)">
<mx:request>
<theCityName>{lang_select.selectedItem.data} </theCityName>
</mx:request>
</mx:operation>
</mx:WebService>
<mx:Panel x="57" y="10" width="481" height="380" layout="absolute" title="利用WebService实现在线天气预报">
<mx:Label x="28" y="32" text="选择城市" width="92" height="31"/>
<mx:ComboBox x="128" y="30" id="lang_select"> </mx:ComboBox>
<mx:Button x="344" y="30" label="开始搜索" click="doSearch()"/>
<mx:TextArea id="output_text" x="28" y="71" width="386" height="247"/>
</mx:Panel>
</mx:Application>
proxy-config.xml文件内容如下:
<?xml version="1.0" encoding="UTF-8"?>
<service id="proxy-service"
class="flex.messaging.services.HTTPProxyService">
<properties>
<connection-manager>
<max-total-connections>100 </max-total-connections>
<default-max-connections-per-host>2 </default-max-connections-per-host>
</connection-manager>
<allow-lax-ssl>true </allow-lax-ssl>
</properties>
<adapters>
<adapter-definition id="http-proxy" class="flex.messaging.services.http.HTTPProxyAdapter" default="true"/>
<adapter-definition id="soap-proxy" class="flex.messaging.services.http.SOAPProxyAdapter"/>
</adapters>
<default-channels>
<channel ref="my-http"/>
<channel ref="my-amf"/>
</default-channels>
<destination id="DefaultHTTP">
</destination>
<destination id="mywebservice">
<properties>
<dynamic-url>
http://www.webxml.com.cn/*
</dynamic-url>
</properties>
</destination>
</service>
运行页面文件就可以了
如果您非常迫切的想了解IT领域最新产品与技术信息,那么订阅至顶网技术邮件将是您的最佳途径之一。
现场直击|2021世界人工智能大会
直击5G创新地带,就在2021MWC上海
5G已至 转型当时——服务提供商如何把握转型的绝佳时机
寻找自己的Flag
华为开发者大会2020(Cloud)- 科技行者