XMLHttpRequest在chrome下的Get请求方式
因为英语学得不好,平常在学习中经常要用到百度翻译,就花了点时间写了个chrome插件。
插件需要向百度的URL Api 发送GET请求,完整的的请求URL如下 :
http://openapi.baidu.com/public/2.0/bmt/translate?client_id=YourApiKey&q=today%0Atomorrow&from=auto&to=auto
key | value | 描述 |
---|---|---|
from | 源语言语种:语言代码或auto | 仅支持特定的语言组合,下面会单独进行说明 |
to | 目标语言语种:语言代码或auto | 仅支持特定的语言组合,下面会单独进行说明 |
client_id | 开发者在百度开发者中心注册得到的授权API key | 请阅读如何获取api keyhttp://developer.baidu.com/console#app/project |
q | 待翻译内容 | 该字段必须为UTF-8编码,并且以GET方式调用API时,需要进行urlencode编码。 |
GET成功后返回的json数据如下:
{"from":"en","to":"zh","trans_result":[{"src":"today","dst":"\u4eca\u5929"}]}
from字段 | to字段 | 翻译方向 |
---|---|---|
auto | auto | 自动识别 |
zh | en | 中 -> 英 |
zh | jp | 中 -> 日 |
GET后返回的错误json数据如下:
{"error_code": "52001", "error_msg": "TIMEOUT", "from": "auto","to": "auto","query": "he's"}
字段 | 含义 | 约束 | 默认值 |
---|---|---|---|
error_code | 错误码(52001,52002,52003,5004) | 必须 | 无 |
error_msg | 错误信息:
①TIMEOUT:超时(52001)【请调整文本字符长度】 |
必须 | 无 |
from | 调用API时的输入参数 | 非必须 | 仅用来帮助发现错误原因 |
to | 调用API时的输入参数 | 非必须 | 仅用来帮助发现错误原因 |
query | 调用API时的输入参数 | 非必须 | 仅用来帮助发现错误原因 |
GET代码片段如下:
//发送GET请求并接收返回的json格式数据 txtSource:待翻译内容 txtReturn:存放翻译后返回的内容 sourceLage:源语言 NewLage:目标语言
function GetTranslate(txtSource,txtReturn,sourceLage,NewLage)
{
//拼接GET URL 待翻译内容要进行encodeURIComponent()编码
var apiUrl = "http://openapi.baidu.com/public/2.0/bmt/translate?client_id=&q="+ encodeURIComponent(txtSource) +"&from="+ sourceLage +"&to="+ NewLage;
//定义了XMLHttpRequest对象 定义时要判断属于什么浏览器
var xmlHttp = window.XMLHttpRequest ? new XMLHttpRequest() : new ActiveXObject("Microsoft.XMLHTTP");
xmlHttp.open("get", apiUrl,true); //打开连接
//定义当请求发送后数据反馈回来时的处理函数
xmlHttp.onreadystatechange = function ()
{
try
{ //判断是否成功返回数据
if (xmlHttp.readyState == 4 && xmlHttp.status == 200)
{
objData = JSON.parse(xmlHttp.responseText); //解析文本格式的json数据并赋给json对象
txtReturn = ""; //清空
try
{
for(var i =0;i < objData.trans_result.length; i ++) //取出翻译完成的内容
{
txtReturn += objData.trans_result[i].dst+"\r\n";
}
sourceLage=objData.from; //返回的源语言
NewLage=objData.to; //返回的目标语言
return txtReturn;
}
catch(err) //当API服务发生错误时返回的json数据
{
txtReturn += objData.error_code+"\r\n"+objData.error_msg+"\r\n"+objData.query+"\r\n";
return txtReturn;
}
}
}
catch(err)
{ alert(err);}
}
xmlHttp.send(null);//发送
}
百度开发者中心参考资料:http://developer.baidu.com/wiki/index.php?title=%E5%B8%AE%E5%8A%A9%E6%96%87%E6%A1%A3%E9%A6%96%E9%A1%B5/%E7%99%BE%E5%BA%A6%E7%BF%BB%E8%AF%91/%E7%BF%BB%E8%AF%91API