如题,用HBuilder开发APP,涉及到用AJAX跨域请求后台数据,刚接触,费了不少时间。幸得高手指点,得以解决。
APP需要用TABLE来显示数据,因此采用了JQ 的DataTable。 在实现过程中发现存在跨域的问题,采用以下方法解决。
$(document).ready(function() { $('#example').DataTable({ "ajax": { "url":"http://Localhost:8085/System/nurse/getPatients", "dataTyle":"jsonp"}, "bPaginate": true, //翻页功能 "bLengthChange": false, //改变每页显示数据数量 "bFilter": true, //过滤功能 "bSort": false, //排序功能 "bInfo": true, //页脚信息 "bAutoWidth": true, //自动宽度 "columns": [{ "data": "name"
将 sAjaxSource 替换成 如上的 ajax ,设置数据类型为 JSONP。当时这部分功能做好后,发现还是报错误,获取不到值。。报【Uncaught TypeError: Cannot read property 'length' of undefined】错误。。查来查去,发现是ajax获取的值,不是需要的JSON格式。一定要JSON对象数组。一定要以data开头的JSON数组。如下格式:
{"data":[{"birthday":"2011/04/25","idtype":"身份证","number":"30","idcode":"1231131313","sex":"男","name":"常1","DT_RowId":"e58930f0ae5442fb8f67474422a76e95","statue":"治疗中"}]}
由于,后台是采用SSM框架的。。获取的数据本身就是JSON格式的。唯独缺少了data开头,处理上只要在Control处理上对返回的 LIST对象数据进行再处理下就OK了,如下:
@RequestMapping(value="getPatients", method=RequestMethod.GET) @ResponseBody public JSONObject getPatients() { List<PatientForApp> results=new ArrayList<PatientForApp>(); JSONObject json=null; try { results = service.findByPageforApp(); Map map = new HashMap(); map.put("data", results); json = JSONObject.fromObject(map); } catch (Exception e) { logger.error(e.toString(), e); /* ar.setFailMsg(Const.DATA_FAIL);*/ } return json; }
以上就实现了SSM框架通过Control处理返回JSON对象数组。。
记忆留存,有何不对请指正。