jquery ajax json 字符串处理 json保存为csv文件 jQuery自动添加元素

<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
    <title>查询船期服务网页 直达</title>
    <!--    <script src="http://libs.baidu.com/jquery/2.1.4/jquery.min.js"></script>-->
    <!--    <script src="json2csv.js" type="text/javascript" charset="utf-8"></script>-->
    <script src="js/jquery.min.js"></script>
    <script src="js/json2csv.js" type="text/javascript" charset="utf-8"></script>
    <script type="text/javascript" charset="utf-8">
        function GetJsonData() {
            // 船期查询服务 请求需要传递json数据
            var schoolList = {
                "SPL_REQUEST": {
                    "SERVICE_NAME": "shipPortToPortSearch",
                    "PARAM_DATA": [
                        {
                            "SYSTEM_CODE": "***",
                            "ORG_CODE": "ALL",
                            "PAGE_SIZE": "100",
                            "CURRENT_PAGE": "1",
                            "POL": $("#POL").val(),  //起始港
                            "POD": $("#POD").val(), //目的港
                            "CARRIER": $("#CARRIER").val(),  // 船公司
                            "D_OR_A": "D",
                            "SEARCH_DATE": "2019-04-03",
                            "WEEK_NUM": "12",
                            "WEEK_DAYS": "",
                            "ZD_OR_ZZ": $("#ZD_OR_ZZ").val(),  // 直达/中转
                            "VESSEL_NAME_EN": $("#VESSEL_NAME_EN").val(), // 船名
                            "VOYAGE_CODE": ""
                        }
                    ]
                }
            };
            return schoolList;
        }

        function handleString(data) {
            // 无中转情况的 船期信息 查询
            // String 字符串拼接修改成 直接读取的格式
            //   1. 先把 [] 去掉,
            // 2.},为分隔符进行切分
            // 3.切分后的每个元素添加 }
            var len = data.length;
            var message = data.substring(2, len - 2);
            // console.log(message);
            var li = message.split("]},");
            for (var i = 0; i < li.length; i++) {
                if (i == li.length - 1) {
                    // alert(li[i]);
                    break;
                }
                li[i] = li[i] + "]}";
            }
            // console.log(li.length);
            // for (var i = 0; i < li.length; i++) {
            //     console.log(li[i])
            // }
            return li;
        }

        // function handlePTP(data) {
        //     var len = data.length;
        //     var message = data.substring(2, len - 2);
        //     console.log(message);
        // }

        function getTdData(tdData) {
            // 把页面内容现在前台页面
            // var jsonStr = '[{"CARRIER":"MAEU","SHIPLINE":"","VESSEL_NAME_EN":"","VESSEL_NAME_CN":"","VOYAGE_CODE":"","POL":"CNSHA","DOCK_CUTTING_DATE":"","ETD":"2019-05-01 17:30:00","ETD_WEEK_DAY":"3","ATD":"","POD":"LSMSU","ETA":"2019-05-29 08:00:00","ETA_WEEK_DAY":"3","ATA":"","SAILING_DAYS":"28","ZD_OR_ZZ":"ZZ","POL_EN":"Shanghai Pt","POL_CN":"上海港","POL_COUNTRY":"CN","POD_EN":"MASERU","POD_CN":"","POD_COUNTRY":"LS","PTP_DTL":[{"CHENG_NUM":"1","CARRIER":"MAEU","SHIPLINE":"AFR","VESSEL_NAME_EN":"MAERSK SIRAC","VESSEL_NAME_CN":"","VOYAGE_CODE":"917S","POL":"CNSHA","DOCK_CUTTING_DATE":"","ETD":"2019-05-01 17:30:00","ETD_WEEK_DAY":"3","ATD":"","POD":"ZADUR","ETA":"2019-05-25 08:00:00","ETA_WEEK_DAY":"6","ATA":"","SAILING_DAYS":"25","POL_EN":"Shanghai Pt","POL_CN":"上海港","POL_COUNTRY":"CN","POD_EN":"DURBAN","POD_CN":"德班","POD_COUNTRY":"ZA"},{"CHENG_NUM":"2","CARRIER":"MAEU","SHIPLINE":"","VESSEL_NAME_EN":"DUMMY","VESSEL_NAME_CN":"","VOYAGE_CODE":"","POL":"ZADUR","DOCK_CUTTING_DATE":"","ETD":"2019-05-26 08:00:00","ETD_WEEK_DAY":"7","ATD":"","POD":"LSMSU","ETA":"2019-05-29 08:00:00","ETA_WEEK_DAY":"3","ATA":"","SAILING_DAYS":"4","POL_EN":"DURBAN","POL_CN":"德班","POL_COUNTRY":"ZA","POD_EN":"MASERU","POD_CN":"","POD_COUNTRY":"LS"}]}]';
            // alert(jsonStr);
            // var jsonObj = JSON.parse(tdData); //转换成JSON对象   转换成JSON对象报错
            // var jsonArr = [];
            // alert(tdData.length);
            var arrays = [];
            //把上次查询的数据删掉
            $("#test").children("#message").empty();
            // for (var i = 0; i < tdData.length; i++) {
            //     console.log(tdData[i]);
            //     console.log(JSON.parse(tdData[i]));
            // }
            for (var i = 0; i < tdData.length; i++) {
                // alert(JSON.stringify(jsonArr[i]));
                // console.log(tdData[i] + JSON.parse(tdData[i]));
                console.log(tdData[i]);
                var cjson = JSON.parse(tdData[i]); //把string 转换成json对象
                // console.log(cjson);
                var CARRIER;
                var SHIPLINE;
                var VESSEL_NAME_EN;
                var VESSEL_NAME_CN;
                var VOYAGE_CODE;
                var POL;

                var DOCK_CUTTING_DATE;
                var ETD;
                var ETD_WEEK_DAY;
                var ATD;
                var POD;
                var ETA;

                var ETA_WEEK_DAY;
                var ATA;
                var SAILING_DAYS;
                var ZD_OR_ZZ;
                var POL_EN;
                var POL_CN;

                var POL_COUNTRY;
                var POD_EN;
                var POD_CN;
                var POD_COUNTRY;

                // var PTP_DTL;
                // 读取 键值对组成的数组
                for (var key in cjson) {
                    switch (key) {
                        case "CARRIER":
                            CARRIER = cjson[key];
                            // alert(CARRIER);
                            break;
                        case "SHIPLINE":
                            SHIPLINE = cjson[key];
                            // alert(SHIPLINE);
                            break;
                        case "VESSEL_NAME_EN":
                            VESSEL_NAME_EN = cjson[key];
                            // alert(VESSEL_NAME_EN);
                            break;
                        case "VESSEL_NAME_CN":
                            VESSEL_NAME_CN = cjson[key];
                            // alert(VESSEL_NAME_CN);
                            break;
                        case "VOYAGE_CODE":
                            VOYAGE_CODE = cjson[key];
                            // alert(VOYAGE_CODE);
                            break;
                        case "POL":
                            POL = cjson[key];
                            // alert(POL);
                            break;
                        case "DOCK_CUTTING_DATE":
                            DOCK_CUTTING_DATE = cjson[key];
                            // alert(DOCK_CUTTING_DATE);
                            break;
                        case "POL_EN":
                            POL_EN = cjson[key];
                            // alert(POL_EN);
                            break;
                        case "ETD_WEEK_DAY":
                            ETD_WEEK_DAY = cjson[key];
                            // alert(ETD_WEEK_DAY);
                            break;
                        case "ATD":
                            ATD = cjson[key];
                            // alert(ATD);
                            break;
                        case "POD":
                            POD = cjson[key];
                            // alert(POD);
                            break;
                        case "ETA":
                            ETA = cjson[key];
                            // alert(ETA);
                            break;

                        case "ETA_WEEK_DAY":
                            ETA_WEEK_DAY = cjson[key];
                            // alert(ETA_WEEK_DAY);
                            break;
                        case "ATA":
                            ATA = cjson[key];
                            // alert(ATA);
                            break;
                        case "SAILING_DAYS":
                            SAILING_DAYS = cjson[key];
                            // alert(SAILING_DAYS);
                            break;
                        case "ZD_OR_ZZ":
                            ZD_OR_ZZ = cjson[key];
                            // alert(ZD_OR_ZZ);
                            break;
                        case "POL_CN":
                            POL_CN = cjson[key];
                            // alert(POL_CN);
                            break;
                        case "POL_COUNTRY":
                            POL_COUNTRY = cjson[key];
                            // alert(POL_COUNTRY);
                            break;
                        case "POD_EN":
                            POD_EN = cjson[key];
                            // alert(POD_EN);
                            break;
                        case "ETD":
                            ETD = cjson[key];
                            // alert(ETD);
                            break;
                        case "POD_CN":
                            POD_CN = cjson[key];
                            // alert(POD_CN);
                            break;
                        case "POD_COUNTRY":
                            POD_COUNTRY = cjson[key];
                            // alert(POD_COUNTRY);
                            break;
                        case "PTP_DTL":
                            // console.log(key);
                            PTP_DTL = cjson[key];
                            // console.log(PTP_DTL);
                            // alert(PTP_DTL);
                            if (typeof PTP_DTL == "undefined" || PTP_DTL == null || PTP_DTL == "") {
                                break;
                            } else {
                                // 取出中转信息中的每个字段
                                PTP_DTL = JSON.stringify(cjson[key]);
                                break;
                            }

                        default:
                            break;
                    }
                }

                var td = '<tr><td>' + CARRIER + '</td><td>' + SHIPLINE + '</td><td>' + VESSEL_NAME_EN + '</td>' +
                    '<td>' + VESSEL_NAME_CN + '</td><td>' + VOYAGE_CODE + '</td><td>' + POL + '</td>' +
                    '<td>' + DOCK_CUTTING_DATE + '</td><td>' + ETD + '</td><td>' + ETD_WEEK_DAY + '</td>' +
                    '<td>' + ATD + '</td><td>' + POD + '</td><td>' + ETA + '</td>' +
                    '<td>' + ETA_WEEK_DAY + '</td><td>' + ATA + '</td><td>' + SAILING_DAYS + '</td>' +
                    '<td>' + ZD_OR_ZZ + '</td><td>' + POL_EN + '</td><td>' + POL_CN + '</td>' +
                    '<td>' + POL_COUNTRY + '</td><td>' + POD_EN + '</td><td>' + POD_CN + '</td>' +
                    '<td>' + POD_COUNTRY + '</td>' +
                    '<td>' + PTP_DTL + '</td>' +
                    '</tr>';
                // alert(td);
                // 展示所有的查询数据
                $("#test").children("#message").append(td);
                arrays[i] = {
                    "CARRIER": CARRIER,
                    "SHIPLINE": SHIPLINE,
                    "VESSEL_NAME_EN": VESSEL_NAME_EN,
                    "VESSEL_NAME_CN": VESSEL_NAME_CN,
                    "VOYAGE_CODE": VOYAGE_CODE,
                    "POL": POL,
                    "DOCK_CUTTING_DATE": DOCK_CUTTING_DATE,
                    "ETD": ETD,
                    "ETD_WEEK_DAY": ETD_WEEK_DAY,
                    "ATD": ATD,
                    "POD": POD,
                    "ETA": ETA,
                    "ETA_WEEK_DAY": ETA_WEEK_DAY,
                    "ATA": ATA,
                    "SAILING_DAYS": SAILING_DAYS,
                    "ZD_OR_ZZ": ZD_OR_ZZ,
                    "POL_EN": POL_EN,
                    "POL_CN": "\ufeff" + POL_CN,
                    "POL_COUNTRY": POL_COUNTRY,
                    "POD_EN": POD_EN,
                    "POD_CN": "\ufeff" + POD_CN,
                    "POD_COUNTRY": POD_COUNTRY,
                    "PTP_DTL": "\ufeff" + PTP_DTL
                };
            }
            return arrays;

        }

        var allCSVData;

        function saveCSV() {
            var fields = ["CARRIER", "SHIPLINE", "VESSEL_NAME_EN", "VESSEL_NAME_CN", "VOYAGE_CODE", "POL",
                "DOCK_CUTTING_DATE", "ETD", "ETD_WEEK_DAY", "ATD", "POD", "ETA", "ETA_WEEK_DAY", "ATA",
                "SAILING_DAYS", "ZD_OR_ZZ", "POL_EN", "POL_CN", "POL_COUNTRY", "POD_EN", "POD_CN", "POD_COUNTRY", "PTP_DTL"];

            // console.log(allCSVData[0].POL_CN);
            // 这里未出现乱码
            // json数据转csv格式
            var csv = json2csv({data: allCSVData, fields: fields});

            // var eleButton = document.querySelector('input[type="button"]');

            // 下载文件方法
            var funDownload = function (content, filename) {
                var eleLink = document.createElement('a');
                eleLink.download = filename;
                eleLink.style.display = 'none';
                // 字符内容转变成blob地址
                var blob = new Blob(["\ufeff" + content], {type: 'text/csv,charset=UTF-8'});
                eleLink.href = URL.createObjectURL(blob);
                // 触发点击
                document.body.appendChild(eleLink);
                eleLink.click();
                // 然后移除
                document.body.removeChild(eleLink);
            };

            if ('download' in document.createElement('a')) {
                // 作为test.html文件下载
                // eleButton.addEventListener('click', function () {
                //     funDownload(csv, 'test.csv');
                // });
                funDownload(csv, 'test.csv');
            } else {
                eleButton.onclick = function () {
                    alert('浏览器不支持');
                };
            }
        }

        $(document).ready(function () {
            // JSON 进行局部刷新
            $("button").click(function () {
                // alert("22222222222222");
                $.ajax({
                    type: "POST",
                    url: "https://api.sinotrans.com:8065/SPLServlet/v1/shipPortToPortSearch",
                    headers: {
                        "Content-Type": "application/json",
                        "KeyId": "11fa5def-9efe-4404-b8f3-3dad5e8fbb8a",
                    },//必须这样写
                    dataType: "json",
                    data: JSON.stringify(GetJsonData()),//schoolList是你要提交是json字符串
                    success: function (data) {
                        var message = JSON.stringify(data.SPL_RESPONSE.SERVICE_DATA); // 取到json的某个字段,并把其转变为string 类型
                        // 替换所有的 \
                        message = message.replace(/\\/g, "");
                        var handle_message = handleString(message);
                        // console.log(handle_message);
                        // handlePTP(handle_message);
                        //把数据展示出来
                        allCSVData = getTdData(handle_message);
                        // 以CSV格式保存起来  加上这个数据,会自动保存为csv文件
                        // saveCSV(allCSVData);
                    },
                    error: function (message) {
                        alert(message);
                        $("#request-process-patent").html("提交数据失败!");
                    }
                });
            });
        });


    </script>

</head>

<body>
<form action="#">
    起运港: <input type="text" id="POL"><br>
    目的港: <input type="text" id="POD"><br>
    船公司名称: <input type="text" id="CARRIER"><br>
    船名(起始港): <input type="text" id="VESSEL_NAME_EN"><br>
    直达/中转ZD_OR_ZZ: <input type="text" id="ZD_OR_ZZ">ZD为直达 ZZ为中转<br>
    <button id="btnSend">查询</button>
</form>
<!--<a id="a1" href="#">服务二</a>-->
<h1>船期查询结果</h1>
<!--<div class="demo">-->
<!--    <p><input type="button" value="把查询结果以CSV格式保存"></p>-->
<!--</div>-->
<button id="save" onclick="saveCSV()">把查询结果以CSV格式保存</button>
<table border="1" id="test">
    <tbody>
    <tr>
        <td>CARRIER</td>
        <td>SHIPLINE</td>
        <td>VESSEL_NAME_EN</td>
        <td>VESSEL_NAME_CN</td>
        <td>VOYAGE_CODE</td>
        <td>POL</td>

        <td>DOCK_CUTTING_DATE</td>
        <td>ETD</td>
        <td>ETD_WEEK_DAY</td>
        <td>ATD</td>
        <td>POD</td>
        <td>ETA</td>

        <td>ETA_WEEK_DAY</td>
        <td>ATA</td>
        <td>SAILING_DAYS</td>
        <td>ZD_OR_ZZ</td>
        <td>POL_EN</td>
        <td>POL_CN</td>

        <td>POL_COUNTRY</td>
        <td>POD_EN</td>
        <td>POD_CN</td>
        <td>POD_COUNTRY</td>

        <td>PTP_DTL</td>
    </tr>
    </tbody>
    <tbody id="message">
    </tbody>
</table>

</body>
</html>

*  jQuery 获取对象 
    * $("#CARRIER").val() 获取ID为CARRIER的对象的val值
* JavaScript 字符串处理 
    * data.length 
    * data.substring(start,end)  截取字符串,从start到end。  
    * data.split("]},")  切割字符串,形成数组
    * message.replace(/\\/g, "")  \g 表示所有匹配到的字符串 /\\ /是匹配字符 \\ 第一个\是转义字符 替换所有的\为空 
* jQuery json 
    * JSON.parse(tdData[i]) 把tdData[i]转化为JSON对象 
    * data.SPL_RESPONSE.SERVICE_DATA  获取JSON对象下的SPL_RESPONSE的SERVICE_DATA字段内容
    * JSON.stringify(GetJsonData) 把GetJsonData JSON对象转化为 字符串
* ajax 现成例子
                $.ajax({
                    type: "POST",
                    url: "https://api.sinotrans.com:8065/SPLServlet/v1/shipPortToPortSearch",
                    headers: {
                        "Content-Type": "application/json",
                        "KeyId": "11fa5def-9efe-4404-b8f3-3dad5e8fbb8a",
                    },//必须这样写
                    dataType: "json",
                    data: JSON.stringify(GetJsonData()),//schoolList是你要提交是json字符串
                    success: function (data) {
                    },
                    error: function (message) {
                        alert(message);
                        $("#request-process-patent").html("提交数据失败!");
                    }
                });
* 保存csv文件 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值