zoukankan      html  css  js  c++  java
  • javascript post数据到WCF反馈json或者XML

    前端代码:

    <script language="javascript" type="text/javascript">
    //创建XMLHTTP
    function createXMLHTTP(){
    var httpRequest;
         
    try {
            httpRequest 
    = new XMLHttpRequest();
         }
         
    catch (e) {
             
    try {
                 httpRequest 
    = new ActiveXObject("Msxml2.XMLHTTP");
             }
             
    catch (e) {
                
    try {
                    httpRequest 
    = new ActiveXObject("Microsoft.XMLHTTP");
                 }
                
    catch (e) {
                    
    return null;
                }
            }
        }
        
    return httpRequest;
    }
    //构造XML格式的文本
    function createXML(){
      
    var id = document.getElementById("id").value;  
      
    var title = document.getElementById("title").value;
      
    var content = document.getElementById("content").value;
      
    var xml = '<?xml version="1.0" encoding="utf-8" ?>';
      xml
    +='<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">';
      xml
    +='<soap:Body>';
      xml
    +='<XmlService xmlns="http://tempUri.org/">';
      
    //var xml = '';
      xml+='<id type="number">'+id+'</id>';
      xml
    +='<mytitle type="string">'+title+'</mytitle>';
      xml
    +='<mycontent type="string">'+content+'</mycontent>';
      xml
    +='</XmlService></soap:Body></soap:Envelope>';
      
    return xml;
    }
    //构造JSON字符串
    function createJSON(){
      
    var id = document.getElementById("id").value;  
      
    var title = document.getElementById("title").value;
      
    var content = document.getElementById("content").value;
      
    var json = '{"id":'+id+',"mytitle":"'+title+'","mycontent":"'+content+'"}';
      
    return json;
    }
    //异步调用服务器
    function callServer(postType) { 
    var xmlHttp =createXMLHTTP();
    if (xmlHttp == null) {alert('浏览器不支持ajax');return;}
    xmlHttp.onreadystatechange 
    = function(){
     
    if (xmlHttp.readyState == 4) {callBack(xmlHttp.responseText)}
    }
    var body;
    var contentType;
    var url;
    if(postType == 'json'){
        body 
    = createJSON();
        contentType 
    = "application/json";
        url 
    = "/JsonXmlService.svc/JsonService";
    }
    if(postType == 'xml'){
        body 
    = createXML();
        contentType 
    = "text/xml";
        url 
    = "/JsonXmlService.svc/XmlService";
    }
    xmlHttp.open(
    "POST", url, true);
    xmlHttp.setRequestHeader(
    "Content-type", contentType);
    xmlHttp.send(body);
    }
    //回调事件
    function callBack(responseText){
    alert(responseText);
    }
    </script>

    前端还有几个HTML控件

    <div>
        文章标题:
    <input type="text" id="title" /><br />
        文章内容:
    <textarea rows="" cols="" id="content"></textarea>
        
    <input type="hidden" id="id" value="1" /><br />
        
    <input type="button"  value="以JSON方式提交" onclick="callServer('json');" />
        
    <input type="button"  value="以XML方式提交" onclick="callServer('xml');" />
        
    </div>
    后端代码
    using System;
    using System.Text;
    using System.Runtime.Serialization;
    using System.ServiceModel;
    using System.ServiceModel.Activation;
    using System.ServiceModel.Web;
    using System.ServiceModel.Channels;
    using System.Xml.Serialization;
    using System.Xml;
    using System.IO;
    namespace JsonXmlWcf
    {
        [ServiceContract(Namespace 
    = "")]
        
    public interface IJsonXmlService
        {
            [OperationContract]
            [WebInvoke(ResponseFormat 
    = WebMessageFormat.Json, BodyStyle = WebMessageBodyStyle.WrappedRequest)]
            MyDataType JsonService(
    int id, string mytitle, string mycontent);
            [OperationContract(Action
    ="*")]
            [WebInvoke(ResponseFormat 
    = WebMessageFormat.Xml, RequestFormat=WebMessageFormat.Xml, BodyStyle = WebMessageBodyStyle.WrappedRequest)]
            Message XmlService(Message m);
        }
        
    public class JsonXmlService:IJsonXmlService
        {
            
    public MyDataType JsonService(int id,string mytitle,string mycontent)
            {
                
    return MyService(id, mytitle, mycontent, "以JSON形式传递");
            }
            
    public Message XmlService(Message m)
            {
                
    return m;
            }
            
    private MyDataType MyService(int id,string mytitle,string mycontent,string info)
            {
                MyDataType MyData 
    = new MyDataType();
                MyData.Id 
    = id;
                MyData.MyTitle 
    = string.Format("{0}({1})", mytitle,info);
                MyData.MyContent 
    = mycontent;
                
    return MyData;
            }
        }
        [DataContract]
        
    public class MyDataType
        {
            
    private int _id;
            
    private string _mytitle;
            
    private string _content;
            [DataMember]
            
    public int Id
            {
                
    get { return _id; }
                
    set { _id = value; }
            }
            [DataMember]
            
    public string MyTitle
            {
                
    get { return _mytitle; }
                
    set { _mytitle = value; }
            }
            [DataMember]
            
    public string MyContent
            {
                
    get { return _content; }
                
    set { _content = value; }
            }
        }

    }
    遗留问题
    messagecontract
    WCF是怎么序列化,反序列化消息的
    一切消息的基类Message的成员

    总结:这样搞WCF不是方法,应该系统的学医下
  • 相关阅读:
    硬币游戏—— 代码分析与改进
    之于我
    C语言中unsigned char与char的区别
    用户体验分析: 以 “通大就业微信公众号” 为例
    2017(秋)软工作业: (2)硬币游戏—— 代码分析与改进
    我与软件工程
    软件工程第四次作业
    软件工程第三次作业
    软件工程第二次作业
    作业四 用户体验分析:以 “师路南通网站” 为例
  • 原文地址:https://www.cnblogs.com/liulun/p/1430231.html
Copyright © 2011-2022 走看看