顺便提一下,今天做项目有一点问题,如何让服务程序接口返回的就是json,而不需要 使用 jQuery.ajax设置 dataType就能得到json呢?
众所周知,服务端的 数据以json字符串输出,文档类型是 “text/html”,因此返回前台的默认是字符串,如果返回前台的指定为json,
需要设置http响应头application/json,这样返回的直接就是json对象了。
注意,必须在输出流之前设置响应头
//java jsp servlet中,在struts中有2种输出json的方式,一种是类似serlvet,另一种是进行json配置,在springmvc中可以直接返回json
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse res)
throws ServletException, IOException
{
response.setContentType("application/json;charset=UTF-8"); //
request.setCharacterEncoding("UTF-8");
PrintWriter out = request.getWriter();
out.println("{'name':'zhangsan','age':20,'gender':'M'}"); //json一般不用来手写,请借助json工具包实现
out.close();
}
<?php
header('application/json;charset=utf-8');
echo "{'name':'zhangsan','age':20,'gender':'M'}";
?>
好了,现在说今天的主角<
原生javascript解析xml文档
>
var loadXML = function(xmlString){ //构建xmldoc对象
var xmlDoc=null;
if(window.DOMParser) //IE9+,FF,webkit
{
try{
domParser = new DOMParser();
xmlDoc = domParser.parseFromString(xmlString, 'text/xml');
}catch(e){
}
}
else if(!window.DOMParser && window.ActiveXObject)
{ //window.DOMParser 判断是否是非ie浏览器
var xmlDomVersions = ['MSXML2.DOMDocument','Microsoft.XMLDOM'];
for(var i=0;i<xmlDomVersions.length;i++){
try{
xmlDoc = new ActiveXObject(xmlDomVersions[i]);
xmlDoc.async = false;
xmlDoc.loadXML(xmlString); //loadXML方法载入xml字符串
break;
}catch(e){
continue;
}
}
}
else{
return null;
}
return xmlDoc;
}
给个数据源
var datasource = '<?xml version="1.0" encoding="utf-8" ?>
<bookstore>
<book id="No1">
<title>An Introduction to XML</title>
<author>Chunbin</author>
<year>2010</year>
<price>98.0</price>
</book>
<book id="No2">
<title>The Performance of DataBase</title>
<author>John</author>
<year>1996</year>
<price discount='7' data='8'>56.0</price>
</book>
</bookstore>';
然后来使用,用法很简单
var xmlDoc = loadXML(datasource);
if(xmlDoc) //xml的解析和html doc几乎完全相同,可以使用 xmlDoc.getElementById(),xmlDoc.getElementsByTagName(),xmlDoc.getElementsByClassName
{
var books= xmlDoc.getElementsByTagName('book');
var book = xmlDoc.getElementById('No2');
if(books)
{
for(var i=0;i<books.length;i++)
{
var title = books[i].getEelementsByTagName('title')[0].firstChild.nodeValue; //确实有点长,因为
var author = books[i].getEelementsByTagName('author')[0].innerHTML;//变短点
var year = books[i].getEelementsByTagName('year')[0].innerHTML; //或者这样
var price = Number(books[i].getEelementsByTagName('price')[0].innerHTML);
//有值了,下一步不是我的事了
}
//获取属性使用 attributes,得到的是nodevaluemap
var attrs = book.attributes;
for(var i=0;i<attrs.length;i++)
{
var attr = attrs[i];
var attr_name = attr.name;
var attr_value = attr.value;
}
}
}
-----------------------------------------------------------------
常用方法,属性api
attributes:
id
length
childElementCount
childNodes
children
className
firstChild
firstElementChild
innerHTML(只读)
lastChild
lastElementChild
localName
nextSibling
nodeName
nodeType
nodeValue
ownerDocument
parentNode
prefix(新)-->表示前缀,xml允许前缀
namespaceURI(新)-->表示命名空间
previousSibling
tagName
注意:xml是字符串数据,一般来说是只读的属性,即使使用某些手段修改,但也不能做到持久化。因为除了文件上传外js不允许进行io操作
javascript解析xml就此结束
参考链接:http://my.oschina.net/ososchina/blog/343748
try doing it!
来源:oschina
链接:https://my.oschina.net/u/2256215/blog/344963