http://www.kxt.com/    像这个一样  现在要防一个这样的功能,用到 socket.io  求大神出招var iosocket = io.connect("http://115.28.243.183:4003", {
        multiplex: false
    });
    iosocket.on('connect', function() {});
    iosocket.on('clMsg', function(data) {
        // console.log(data) //加了IE出错
        //判断进行提醒
        noticUser();
        socketCreateHtml(data);
    })
function socketCreateHtml(data) {
    this.data = JSON.parse(data);
    var addHtml = function(html, type) {
        $(".mainnews ul").prepend(html);
        setTimeout(function() {
            $(".mainnews ul li").removeClass("blingColor");
        }, 5000);
    }
    var newsHtml = function() {
        if (!this.data.title) {
            return false;
        }
        $(".mainnews ul li").removeClass("blingColor");
        var h = '<li id="%s" class="blingColor %s"><span>%s</span><p>%s</p></li>';
        if (this.data.isstress == "True") {
            style = "r_";
        } else {
            style = "";
        }
        t = getTrueTime(this.data.time);
        h = sprintf(h, this.data.id, style, t, this.data.title);
        addHtml(h, "isnews");
    }
    var hqHtml = function() {        var h = '<li  alt="zy" class="hq %s"><span>%s</span><img src="/Public/Home/c_guo/%s.png" alt="%s" class="c_guo"><p class="finance">%s<br><span>前值:%s</span><span>预期:%s</span></p><p class="star_back_mid s_%s"> <i>%s</i>实际值:%s</p><p class="duokongBox">%s</p></li>';
        //一些默认值的设置
        var style = "";        //对title进行解析
        var row = this.data.title.split("#");        //数据重要性
        var level = row[5];
        var levelEn = Lang.change('NATURE', level);
        if (levelEn == 'zy') {
            style = 'r_';
        }
        //时间
        var truetime = getTrueTime(row[7]);        //国家
        var country = row[8];
        var countryEn = Lang.change('COUNTRY', country);        var title = row[1];        //前值
        var before = row[2];        //预测
        var forecast = row[3];        var start = getRealityStyle(levelEn);        effectdata = getEffectData(row[6]);        cookieType = $.cookie("type");
        if (!cookieType) {
            cookieType = [];
        }        var box = "";
        if (effectdata) {
            for (var key in effectdata) {
                box += "<span class='" + getEffectStyle(key, levelEn) + "'>" + key + ": ";
                for (var k in effectdata[key]) {
                    box += "<em ";
                    if (cookieType.length && cookieType.indexOf(k) < 0) {
                        box += " style='display:none' ";
                    }                    box += " alt='" + k + "' >" + effectdata[key][k] + "</em> ";
                };
                box += "</span>";
            };
        } else {
            box = '<span class="xiao">影响较小</span>';
        }        h = sprintf(h, style, truetime, countryEn, country, country + title, before, forecast, start, level, row[4], box);
        addHtml(h);
        toggleData();
    }
    if (this.data.type == 1) {
        if ($("#" + this.data.id).length > 0) {
            if (this.data.title) {
                //修改
                var h = '<span>%s</span><p>%s</p>';                t = getTrueTime(this.data.time);
                h = sprintf(h, t, this.data.title);                $("#" + this.data.id).html(h);
                if (this.data.isstress == "True") {
                    $("#" + this.data.id).addClass("r_");
                }
            } else {
                //删除
                $("#" + this.data.id).remove();
            }
        } else {
            newsHtml();
        }
    } else if (this.data.type == 2) {        hqHtml();
    }}

解决方案 »

  1.   

    现在要把json数据放到html中实时更新 该如何操作
      

  2.   

    能否请教一下, http://www.kxt.com/     用了什么技术防爬虫的,我试图用c#编码抓取行情数据,研究了半天也没有搞定,
      

  3.   

    我在研究kxt的时候,先从web前端角度,试了如下代码:<html>
    <head>
    <script type="text/javascript" src="/jquery/jquery.js"></script>
    <script type="text/javascript">
        function getToken(){
            token = "abcde";
            $.ajax({
                type:'post',
                url:'http://www.kxt.com/Quotes/achieveKey',
                dataType:'json',
                async:false,
                success:function(b){
                        if(b.status){
                            alert("zzz");
                            token=$.cookie('qVHu$u9gFfh2OsWxLoh5GZ1t');
                        }
                    },
                error:function(){
                   alert("mmm");
                }
            })
        }$(document).ready(function(){
      $("#b01").click(function(){
      alert("xxx");
    getToken();
    alert("yyy");
      $("#myDiv").html(token);
      });
    });
    </script>
    </head>
    <body><div id="myDiv"><h2>通过 AJAX 改变文本</h2></div>
    <button id="b01" type="button">改变内容</button></body>
    </html>
    发现输出的是mmm,而不是zzz,也就是说,getToken函数没有成功,这个是为什么呢?  我初始理解这个函数顾名思义是为了获取cookie什么的,可是,看上去不是啊,,,好像还有什么限制条件的
      

  4.   

    我还在w3cschoole试了下面的,(我在本机试验连alert都没有出来,不知道为什么),可是结果直接到socket.onerror 函数里面去了。不知道到底限制在哪里。<html>
    <head>
    <script type="text/javascript" src="/jquery/jquery.js"></script>
    <script type="text/javascript">
     var quoteStr = "DINIW_AUDUSD_EURUSD_GBPUSD_USDJPY_USDCNY_USDCAD_USDCHF_USDHKD_USDSGD_USDSEK_EURGBP_EURCHF_EURJPY_EURNZD_EURAUD_EURCAD_GBPCHF_GBPAUD_GBPNZD_GBPCAD_GBPJPY_CADCHF_CADJPY_CHFJPY_AUDCAD_AUDNZD_AUDJPY_AUDCHF_NZDUSD_NZDCAD_NZDJPY_NZDCHF_USDNOK_USDDKK_USDZAR_USDTRY_USDMXN";
        var dataHqString="ws://120.26.101.164:27468";    var dataHqStringTest="ws://120.26.101.164:36584";    var settime = (Math.floor(Math.random()*8)+3)*1000;
        var Heartbeat_id = "";
        var flagCount = 0;
        var token = "";
        var quotesArray=quoteStr.split("_");
        function initSocket(){alert("initsocket");        socket = new WebSocket(dataHqStringTest+'?token=fbiyZLKHhJqAi3Zlg5nWnJN9s5XFq3CsxtGl05SQZZ9_zaugx3uJ3IGjqKiNqZxmlmjE2sOYn2av0YfblYx6qXnSq53FinCVjI1qmo-ttax7n9DOr7mera_OfpaBfGWufrimprCHkNx7oKibma3Pp4yIqpuvuYhpsriGmoGNdmh-l5Fu');
            
    alert("aftersocket");        socket.onopen = function (e) {
    alert("onopen");
                login();            Heartbeat_id = setInterval(function(){
                    socket.send('');
                },60*1000*3);
                socket.onmessage = function (res) {
                    try {
                        var data = JSON.parse(res.data);
                    } catch (error) {
                        return false;
                    }
                    if (data.c) {
                        isSelect(data);
                    } else {
                        for (var i = 0; i < data.length; i++) {
                            isSelect(data[i]);
                        }
                    }            };            socket.onclose = function (e) {
    alert("onclose");
                    setTimeout(function(){
                        initSocket();
                    },settime);
                };            function login(){
                    var msg ={
                        cmd: "login",
                        codes:quotesArray
                    };
                    msg = JSON.stringify(msg);
                    try{
                        socket.send(msg);
                    }catch(e){                }
                }
            };
            socket.onerror = function (e) {
    alert("onerror  " + e.data);
            };
        }
    $(document).ready(function(){
      $("#b01").click(function(){
      alert("xxx");
      initSocket();
      alert("yyy");
      $("#myDiv").html("abcde");
      });
    });
    </script>
    </head>
    <body><div id="myDiv"><h2>通过 AJAX 改变文本</h2></div>
    <button id="b01" type="button">改变内容</button></body>
    </html>