在返回头的content-type中设置为application/json
利用Appcan的Native模式开发的widget,也是属于跨域访问的范畴,因此,也会碰到上述情况,这里介绍两种Appcan中的解决方案:
一、Jquery的$.getJSON(url,function(data){});
其中,url中必须带有jsoncallback参数,参数值为"?",Jquery会在请求时替换为一个随机的唯一数:
http://xxxx.php?jsoncallback=?&name1=value1&name2=value2
用$.getJSON时,数据的返回格式要是xxx({"a":"1","b":"2"})例如:
xxx({"status":"true","listData":[{"id":"261803","title":"虚拟投影键盘","name":"前沿科技","summary":"这款虚拟投影键盘设计独特,每一个敲击都不会相互干扰,可以同时接受。"},{"id":"261994","title":"科学家发现"最大黑洞"","name":"环球快递","summary":"美国加州大学伯克利分校的天文学家尼古拉斯•麦克康纳尔和他的同事发现了两个目前已知最大的黑洞。"}}]})
注意:需验证{"a":"1","b":"2"}json格式的正确性,可在jsonlint.com网站上验证,如果格式不合法将获取不到数据
二、Appcan封装的uexXmlHttpMgr对象
uexXmlHttpMgr.open(String inXmlHttpID, String inMethods, String inUrl);
第一个参数:
第二个参数:
第三个参数:
通过uexXmlHttpMgr.onData函数获取值。
uexXmlHttpMgr.onData(inOpCode,inResult)
inOpCode:操作ID,由发起请求时传入的值,随机不重复;
inResult:服务器返回的任意数据;String类型。
使用方式:
<!DOCTYPE HTML>
<html>
<head>
<title>跨域异步请求接口</title>
</head>
<body>
<div class="tit">跨域异步请求接口</div>
<div class="conbor" id="my_result"></div>
<script type="text/javascript">
var url="http://192.168.1.5/musicmodel/api/user.api.php?m=param&appid=1000";
function xmlHttp(){
uexXmlHttpMgr.open("1", "GET",url,"");
uexXmlHttpMgr.send("1");
}
function httpSuccess(opid,stauts,result){
document.getElementById("my_result").innerHTML =result;
uexXmlHttpMgr.close("1");
}
window.uexOnload = function(){
uexXmlHttpMgr.onData = httpSuccess;
uexWidgetOne.cbError = function(opCode, errorCode, errorInfo){
alert(errorInfo);
}
}
</script>
</body>
</html>