angular2+ionic2调用百度翻译API程序

参考百度翻译API提供的相关文档,拟实现基于anguler2+ionic2框架的翻译程序

在程序的实现过程中主要学习了以下几点:

1.将JS示例程序移植到angular2框架中;

2.angular2调用JS脚本;

3.运用了jsonp进行网络请求。

官网给出的是一个html格式的demo:

<!doctype html>
<head>
    <meta charset="utf-8"/>
</head>
<body>
<div>可打开浏览器控制台查看结果</div>
<script src="http://apps.bdimg.com/libs/jquery/1.9.1/jquery.min.js"></script>
<script src="./md5.js"></script>
<script type="text/javascript">
var appid = '2015063000000001';
var key = '12345678';
var salt = (new Date).getTime();
var query = 'apple';
// 多个query可以用\n连接  如 query='apple\norange\nbanana\npear'
var from = 'en';
var to = 'zh';
var str1 = appid + query + salt +key;
var sign = MD5(str1);
$.ajax({
    url: 'http://api.fanyi.baidu.com/api/trans/vip/translate',
    type: 'get',
    dataType: 'jsonp',
    data: {
        q: query,
        appid: appid,
        salt: salt,
        from: from,
        to: to,
        sign: sign
    },
    success: function (data) {
        console.log(data);
    } 
});

</script>
</body>

里面用到了jquery的ajax请求和调用MD5加密算法,所以要将程序移植到angular2中,需要解决以上两个调用的问题。

示例程序首先调用了MD5加密算法对发送的数据加密(<script src="./md5.js"></script>),对于angular2,要么自己写一个函数实现MD5加密,要么调用demo自带的脚本ma5.js,为了多学一点知识,于是开启了angular调用JS脚本的探索之旅,看了网上很多文章,终于找到了一个比较好的解决方案:https://blog.csdn.net/xiekongxk/article/details/52233031

  • 1)首先新建一个.d.ts格式的脚本,里面声明要引用JS库里面定义的变量,变量名要保持一致

2)把MD5.JS脚本放在www目录下

然后在www/index.html中导入js

最后在需要用的ts文件里引用,就可以调用MD5.JS脚本中的主函数了

2.demo使用jquery.ajax进行网络请求,并且返回数据为jsonp,不是json,所以一开始我使用angular2中的http.get()请求会报如下错误:

将http.get()替换为jsonp.get()后,又会报以下错误:

网上找到了解决方案:https://segmentfault.com/a/1190000008345807

需要在参数中添加callback参数,同时callCount需要递增,即可解决问题。

完整代码如下:

      this.str1 =this.appid+this.query+this.salt+this.key;
      this.sign  = MD5(this.str1);

      let params = new URLSearchParams();
      params.append("q",this.query);
      params.append("from",this.from);
      params.append("to",this.to);
      params.append("appid",this.appid);
      params.append("salt",this.salt);
      params.append("sign",this.sign);

      let callback="__ng_jsonp__.__req"+this.callCount+".finished";
      params.set("callback", callback);
      this.callCount++;
      
      let options = new RequestOptions({search:params});

      this.jsonp.get(this.url,options)
          .toPromise()
          .then(response=>{
              let data = response.json();
              if(data.trans_result)
              {
                  this.result=data.trans_result[0].dst;
                  console.log(this.result);
              }
              else if(data.error_code){
                  console.log(data.error_msg);
              }
          }).catch(error=>{
              console.log(error);
          console.log("false");
      })

 最后需要注意的几个小点:

1.转码问题:若需要翻译中文,首先要将中文进行utf-8编码。

2.参数名称:容易写错的参数名,例如把from写成了form之类的。

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值