12306列车时刻表查询api功能实现

最近乘坐火车,在车上像快要看看列车时刻表,大概知道什么时间到达什么车站,起初是每次都打开12306APP查询,然后感觉每次打开APP很麻烦,就去微信小程序里边搜索,果然有我们伟大的猿类同胞做了这件事。于是乎,我就想12306是不是有开放平台提供了接口供我们使用,查了查竟然没有,聚合数据有此类接口(https://www.juhe.cn/docs/api/id/22),还是收费的。身为一个勤劳好学的猿,必须要亲自试一试。在查了查信息,看了一些前辈们的资料,自己终于也简单实现了。

1.获取全国所有车站
获取车站的目的是拿到全国所有车站的电码信息编号,后续需要用到。

/**
 * 车站的电码信息编号
 * 数据格式:@bjb|北京北|VAP|beijingbei|bjb|0
 * 车站名缩写:bjb
 * 车站名称:北京北
 * 车站电码编号:VAP
 * 车站数字编号:0
 * author 江南极客
 */
function get_station_code(){
    $url = 'https://kyfw.12306.cn/otn/resources/js/framework/station_name.js';
    $data = curl_request($url);
    if(!$data){
        msgReturn('获取数据失败',-1);
    }
    //var station_names ='@bjb|北京北|VAP|beijingbei|bjb|0...';
    $station_data = strrchr($data,'=');
    $station_name = ltrim($station_data,"='@");
    $station_name = rtrim($station_name,"';");
    $station_arr = explode('@',$station_name);
    if(empty($station_arr)){
        msgReturn('获取数据失败',-1);
    }

    return $station_arr;
}

由于车站信息需要做查询,所以我将数据爬出来存入数据库。

/**
 * 导入车站信息(至数据库)
 * author 江南极客
 * @return array
 */
function import_train_station(){
    $station_arr = get_station_code();
    $station_data = array();
    $time = date('Y-m-d H:i:s');
    $month = date('n');

    $db_config = array(
        'hostname'  => '127.0.0.1',
        'username'  => 'root',
        'password'  => 'root',
        'database'  => 'dmx_train',
        'pconnect'  => 0,
        'log'  => 0
    );
    $db = new DB($db_config);
    $update = false; //是否要更新数据
    //数据一个月更新一次
    $one_sql = 'select * from dmx_station_info where update_month='.$month;
    $curr_month_data = $db->get_one($one_sql);
    if(empty($curr_month_data)){
        //当前月份没有数据,则截断表然后插入数据
        $update = true;
        $truncate_sql = 'TRUNCATE dmx_station_info';
        $db->query($truncate_sql);
    }
    foreach ($station_arr as $item){
        $temp = explode('|',$item);
        $temp_arr = array(
            'station_no' => $temp[5],
            'station_abbr' => $temp[0],
            'station_name' => $temp[1],
            'station_telecode' => $temp[2],
            'ch_pinyin' => $temp[3],
            'simp_pinyin' => $temp[4],
            'origin_info' => $item,
            'update_time' => $time,
            'update_month' => $month,
        );
        $station_data[] = $temp_arr;
        if($update){
            $db->insert('dmx_station_info',$temp_arr);
        }
    }
    return $station_data;
}

导入数据库后的数据如下:

车站信息

2.拿到12306月排班表所有的车次信息
铁道部每日排班车次1万多条数据,每月30多万,一次取出来数据30多万条数据大概23M多,程序很容易就请求超时,可以取出来然后做缓存一个月更新一次。

/**
 * 通过12306月排班表拿到所有的车次信息
 * 铁道部 每日排班车次1万多条数据 , 每月30多万 , 一次取出来数据量非常庞大,可以取出来然后做缓存一个月更新一次
 * author 江南极客
 * @return mixed
 */
function get_train_list(){
    $cache_file = __DIR__.'/train_list.json';
    CHECKFILE:
    if(file_exists($cache_file)){
        $cache_time = filemtime($cache_file);
        $month = date('n');
        //一个月缓存一次
        if(date('n',$cache_time) != $month){
            @unlink($cache_file);
            goto CHECKFILE;
        }
        $train_list = file_get_contents($cache_file);
    }else{
        $url = 'https://kyfw.12306.cn/otn/resources/js/query/train_list.js?scriptVersion=1.0';
        $data = curl_request($url);
        $train_data = strrchr($data,'=');
        $train_list = ltrim($train_data,"=");
        $train_list = rtrim($train_list,",");
        @file_put_contents($cache_file,$train_list);
    }
    $train_arr = json_decode($train_list,true);
    return $train_arr;
}

同样的为了便于查询,将数据爬出来存入数据库。一次取出来30多条数据,处理数据然后插入数据库,如果一次性做,就会超时,所以我使用了比较笨的方法:一次只操作一天的数据,可以循环倒入。

/**
 * 导入车次信息(至数据库)
 * author 江南极客
 */
function import_train_list(){
    //数据库配置
    $db_config = array(
        'hostname'  => '127.0.0.1',
        'username'  => 'root',
        'password'  => 'root',
        'database'  => 'dmx_train',
        'pconnect'  => 0,
        'log'  => 0
    );
    $db = new DB($db_config);

    //获取一个月内列车排班信息列表
    $station_arr = get_train_list();
    $station_arr_count = count($station_arr);

    //一次取出来 一个月的信息 一次只操作一天的数据
    $temp_times = 'youqijun';
    session_start() ;
    if(isset($_SESSION[$temp_times])){
        $temp = $_SESSION[$temp_times];
        $temp += 1;
        $_SESSION[$temp_times] = $temp;
    }else{
        $temp = 0;
        $_SESSION[$temp_times] = $temp;
    }
    if($temp >= $station_arr_count){
        msgReturn('导入完毕',-1);
    }
    //截取数组的一部分(一次取一天的数据)
    $station_arr = array_slice($station_arr,$temp,1);
    if(empty($station_arr)){
        msgReturn('暂无数据',-1);
    }

    $temp_arr = array();
    $pattern = "/^(.*?)\((.*?)\-(.*?)\)$/";
    $month = date('n');
    foreach ($station_arr as $key1 => $date_arr){
        $time = $key1;
        foreach ($date_arr as $key2 => $train_arr){
            $type = $key2;
            foreach ($train_arr as $train){
                $train['train_date'] = $time.' 00:00:00';
                $train['train_type'] = $type;
                $train['update_month'] = $month;
                //K580(长沙-成都东)  匹配出车次 和 始发站,终到站
                preg_match_all($pattern, $train['station_train_code'], $match);
                //$train_sn = strstr($train['station_train_code'],'(',true);
                $train['train_sn'] = $match[1][0];
                $train['from_station'] = $match[2][0];
                $train['to_station'] = $match[3][0];
                $train['between_station'] = $match[2][0].'-'.$match[3][0];
                $temp_arr[] = $train;
                $db->insert('dmx_train_list',$train);
            }
        }
    }
    print_r($temp_arr);
}

导入数据库后的数据如下:

车次信息

3.获取列车运行时刻表
(1)通过车次和日期 , 在步骤2的数据中拿到该车次的始发站,终点站和车次编码
(2)在步骤1的数据中,拿到始发站和终点站的电码信息编号
(3)调用接口拿到该车次运行时刻信息

/**
 * 获取列车时刻表
 * @param string $train_sn 车次(如:G1207)
 * @param string $date 日期
 * train_no: 车次编号
 * from_station_telecode: 起始站点的电码编号
 * to_station_telecode: 目的站点的电码编号
 * depart_date: 查询日期
 * author 江南极客
 * @return mixed
 */
function get_train_timetable($train_sn='',$date=''){
    $url = 'https://kyfw.12306.cn/otn/czxx/queryByTrainNo?';
    if(empty($train_sn)){
        msgReturn('请填写车次',-1);
    }
    if(empty($date)) {
        $date = date('Y-m-d');
    }else{
        $date_str = strtotime($date);
        $date = date('Y-m-d',$date_str);
    }
    $db_config = array(
        'hostname'  => '127.0.0.1',
        'username'  => 'root',
        'password'  => 'root',
        'database'  => 'dmx_train',
        'pconnect'  => 0,
        'log'  => 0
    );
    $db = new DB($db_config);
    $train_date = $date.' 00:00:00';
    $train_sn = strtoupper($train_sn);
    //根据输入的车次 拿到 车次排班编号,始发站和终到站
    $train_sql = "select * from dmx_train_list where train_sn='{$train_sn}' and train_date='{$train_date}'";
    $train = $db->get_one($train_sql);
    if(empty($train)){
        msgReturn('未查到当日当次列车信息',-1);
    }
    //取出始发站和终到站的电码编号
    $from_station_name = $train['from_station'];
    $to_station_name = $train['to_station'];
    $from_station_sql = "select * from dmx_station_info where station_name='{$from_station_name}'";
    $to_station_sql = "select * from dmx_station_info where station_name='{$to_station_name}'";
    $from_station = $db->get_one($from_station_sql);
    if(empty($from_station)){
        msgReturn('未查到始发车站',-1);
    }
    $to_station = $db->get_one($to_station_sql);
    if(empty($to_station)){
        msgReturn('未查到终点车站',-1);
    }
    $param = [
        'train_no' => $train['train_no'],
        'from_station_telecode' => $from_station['station_telecode'],
        'to_station_telecode' => $to_station['station_telecode'],
        'depart_date' => $date,
    ];
    $http_param = http_build_query($param);
    $url = $url.$http_param;
    $header = array('User-Agent:Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.132 Safari/537.36');
    $data = curl_request($url,true,'GET',null,$header);
    if(!$data){
        msgReturn('网络错误',-1);
    }
    $data = json_decode($data,true);
    if(empty($data['data']['data'])){
        msgReturn('列车时刻表数据不存在',-1);
    }
    return $data['data']['data'];
}

附:存储车站信息和车次信息的数据库DDL:

CREATE TABLE IF NOT EXISTS `dmx_station_info` (
  `id` INT(11) unsigned NOT NULL AUTO_INCREMENT PRIMARY KEY,
  `station_no` INT(6) NOT NULL DEFAULT '0' COMMENT '车站编号',
  `station_abbr` VARCHAR(32) NOT NULL DEFAULT '' COMMENT '车站缩写',
  `station_name` VARCHAR(32) NOT NULL DEFAULT '' COMMENT '车站名称',
  `station_telecode` VARCHAR(32) NOT NULL DEFAULT '' COMMENT '车站电码编号',
  `ch_pinyin` VARCHAR(64) NOT NULL DEFAULT '' COMMENT '车站拼音',
  `simp_pinyin` VARCHAR(64) NOT NULL DEFAULT '' COMMENT '车站简拼',
  `origin_info` varchar(128) NOT NULL DEFAULT '' COMMENT '原始信息',
  `update_time` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00' COMMENT '更新时间',
  `update_month` tinyint(2) NOT NULL DEFAULT '0' COMMENT '更新月份',
  KEY `inx_no`(`station_no`),
  KEY `inx_telecode`(`station_telecode`)
) ENGINE = MyISAM DEFAULT CHARSET=utf8 COMMENT='车站信息表';

CREATE TABLE IF NOT EXISTS `dmx_train_list` (
  `id` INT(11) unsigned NOT NULL AUTO_INCREMENT PRIMARY KEY,
  `station_train_code` VARCHAR(64) NOT NULL DEFAULT '' COMMENT '车次信息',
  `train_no` VARCHAR(16) NOT NULL DEFAULT '' COMMENT '车次编号',
  `train_date` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00' COMMENT '发车时间',
  `train_type` CHAR(1) NOT NULL DEFAULT '' COMMENT '类型(K D G)',
  `train_sn` VARCHAR(16) NOT NULL DEFAULT '' COMMENT '车次',
  `from_station` VARCHAR(16) NOT NULL DEFAULT '' COMMENT '始发站',
  `to_station` VARCHAR(16) NOT NULL DEFAULT '' COMMENT '终到站',
  `between_station` varchar(32) NOT NULL DEFAULT '' COMMENT '始发-终到',
  `update_month` tinyint(2) NOT NULL DEFAULT '0' COMMENT '更新月份',
  KEY `inx_no`(`train_no`),
  KEY `inx_sn`(`train_sn`)
) ENGINE = MyISAM DEFAULT CHARSET=utf8 COMMENT='车次信息表';

简单写个界面,就可以查到信息啦:

附:源码(一个单文件搞定)

<?php

header("Content-type: text/html; charset=utf-8");

require_once 'db.class.php.php';//数据库
error_reporting(0);//屏蔽错误警告
ignore_user_abort(); //忽略关闭浏览器
set_time_limit(0); //永远执行


//设置网络请求配置
function curl_request($curl,$https=true,$method='GET',$data=null,$aHeader=array()){
    // 创建一个新cURL资源
    $ch = curl_init();

    // 设置URL和相应的选项
    curl_setopt($ch, CURLOPT_URL, $curl);    //要访问的网站
    curl_setopt($ch, CURLOPT_HEADER, false);    //启用时会将头文件的信息作为数据流输出。
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);  //将curl_exec()获取的信息以字符串返回,而不是直接输出。

    if( count($aHeader) >= 1 ){
        curl_setopt($ch, CURLOPT_HTTPHEADER, $aHeader);
    }

    if($https){
        curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);  //FALSE 禁止 cURL 验证对等证书(peer's certificate)。
        curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false);  //验证主机
    }
    if(strtoupper($method) == 'POST'){
        curl_setopt($ch, CURLOPT_POST, true);  //发送 POST 请求
        curl_setopt($ch, CURLOPT_POSTFIELDS, $data);  //全部数据使用HTTP协议中的 "POST" 操作来发送。
    }


    // 抓取URL并把它传递给浏览器
    $content = curl_exec($ch);
    //关闭cURL资源,并且释放系统资源
    if($content){
        curl_close($ch);
        return $content;
    }else {
        $error = curl_errno($ch);
        echo "call faild, errorCode:$error\n";
        curl_close($ch);
        return false;
    }

}

/**
 * 数据输出返回
 * @param null $data
 * @param int $errCode
 * author 江南极客
 */
function msgReturn($data=null,$errCode=0){
    $returnArr = array(
        'error_no'=>$errCode,
    );
    if($errCode===0 || is_array($data)){
        $returnArr['data'] = $data;
    }else{
        $returnArr['error_msg'] = $data;
    }
    die(json_encode($returnArr));
}

/**
 * 车站的电码信息编号
 * 数据格式:@bjb|北京北|VAP|beijingbei|bjb|0
 * 车站名缩写:bjb
 * 车站名称:北京北
 * 车站电码编号:VAP
 * 车站数字编号:0
 * author 江南极客
 */
function get_station_code(){
    $url = 'https://kyfw.12306.cn/otn/resources/js/framework/station_name.js';
    $data = curl_request($url);
    if(!$data){
        msgReturn('获取数据失败',-1);
    }
    //var station_names ='@bjb|北京北|VAP|beijingbei|bjb|0...';
    $station_data = strrchr($data,'=');
    $station_name = ltrim($station_data,"='@");
    $station_name = rtrim($station_name,"';");
    $station_arr = explode('@',$station_name);
    if(empty($station_arr)){
        msgReturn('获取数据失败',-1);
    }

    return $station_arr;
}

/**
 * 导入车站信息(至数据库)
 * author 江南极客
 * @return array
 */
function import_train_station(){
    $station_arr = get_station_code();
    $station_data = array();
    $time = date('Y-m-d H:i:s');
    $month = date('n');

    $db_config = array(
        'hostname'  => '127.0.0.1',
        'username'  => 'root',
        'password'  => 'root',
        'database'  => 'dmx_train',
        'pconnect'  => 0,
        'log'  => 0
    );
    $db = new DB($db_config);
    $update = false; //是否要更新数据
    //数据一个月更新一次
    $one_sql = 'select * from dmx_station_info where update_month='.$month;
    $curr_month_data = $db->get_one($one_sql);
    if(empty($curr_month_data)){
        //当前月份没有数据,则截断表然后插入数据
        $update = true;
        $truncate_sql = 'TRUNCATE dmx_station_info';
        $db->query($truncate_sql);
    }
    foreach ($station_arr as $item){
        $temp = explode('|',$item);
        $temp_arr = array(
            'station_no' => $temp[5],
            'station_abbr' => $temp[0],
            'station_name' => $temp[1],
            'station_telecode' => $temp[2],
            'ch_pinyin' => $temp[3],
            'simp_pinyin' => $temp[4],
            'origin_info' => $item,
            'update_time' => $time,
            'update_month' => $month,
        );
        $station_data[] = $temp_arr;
        if($update){
            $db->insert('dmx_station_info',$temp_arr);
        }
    }
    return $station_data;
}

/**
 * 通过12306月排班表拿到所有的车次信息
 * 铁道部 每日排班车次1万多条数据 , 每月30多万 , 一次取出来数据量非常庞大,可以取出来然后做缓存一个月更新一次
 * author 江南极客
 * @return mixed
 */
function get_train_list(){
    $cache_file = __DIR__.'/train_list.json';
    CHECKFILE:
    if(file_exists($cache_file)){
        $cache_time = filemtime($cache_file);
        $month = date('n');
        //一个月缓存一次
        if(date('n',$cache_time) != $month){
            @unlink($cache_file);
            goto CHECKFILE;
        }
        $train_list = file_get_contents($cache_file);
    }else{
        $url = 'https://kyfw.12306.cn/otn/resources/js/query/train_list.js?scriptVersion=1.0';
        $data = curl_request($url);
        $train_data = strrchr($data,'=');
        $train_list = ltrim($train_data,"=");
        $train_list = rtrim($train_list,",");
        @file_put_contents($cache_file,$train_list);
    }
    $train_arr = json_decode($train_list,true);
    return $train_arr;
}

/**
 * 导入车次信息(至数据库)
 * author 江南极客
 */
function import_train_list(){
    //数据库配置
    $db_config = array(
        'hostname'  => '127.0.0.1',
        'username'  => 'root',
        'password'  => 'root',
        'database'  => 'dmx_train',
        'pconnect'  => 0,
        'log'  => 0
    );
    $db = new DB($db_config);

    //获取一个月内列车排班信息列表
    $station_arr = get_train_list();
    $station_arr_count = count($station_arr);

    //一次取出来 一个月的信息 一次只操作一天的数据
    $temp_times = 'youqijun';
    session_start() ;
    if(isset($_SESSION[$temp_times])){
        $temp = $_SESSION[$temp_times];
        $temp += 1;
        $_SESSION[$temp_times] = $temp;
    }else{
        $temp = 0;
        $_SESSION[$temp_times] = $temp;
    }
    if($temp >= $station_arr_count){
        msgReturn('导入完毕',-1);
    }
    //截取数组的一部分(一次取一天的数据)
    $station_arr = array_slice($station_arr,$temp,1);
    if(empty($station_arr)){
        msgReturn('暂无数据',-1);
    }

    $temp_arr = array();
    $pattern = "/^(.*?)\((.*?)\-(.*?)\)$/";
    $month = date('n');
    foreach ($station_arr as $key1 => $date_arr){
        $time = $key1;
        foreach ($date_arr as $key2 => $train_arr){
            $type = $key2;
            foreach ($train_arr as $train){
                $train['train_date'] = $time.' 00:00:00';
                $train['train_type'] = $type;
                $train['update_month'] = $month;
                //K580(长沙-成都东)  匹配出车次 和 始发站,终到站
                preg_match_all($pattern, $train['station_train_code'], $match);
                //$train_sn = strstr($train['station_train_code'],'(',true);
                $train['train_sn'] = $match[1][0];
                $train['from_station'] = $match[2][0];
                $train['to_station'] = $match[3][0];
                $train['between_station'] = $match[2][0].'-'.$match[3][0];
                $temp_arr[] = $train;
                $db->insert('dmx_train_list',$train);
            }
        }
    }
    print_r($temp_arr);
}

/**
 * 获取列车时刻表
 * @param string $train_sn 车次(如:G1207)
 * @param string $date 日期
 * train_no: 车次编号,从步骤1中的数据获取
 * from_station_telecode: 起始站点的电码编号
 * to_station_telecode: 目的站点的电码编号
 * depart_date: 查询日期
 * author 江南极客
 * @return mixed
 */
function get_train_timetable($train_sn='',$date=''){
    $url = 'https://kyfw.12306.cn/otn/czxx/queryByTrainNo?';
    if(empty($train_sn)){
        msgReturn('请填写车次',-1);
    }
    if(empty($date)) {
        $date = date('Y-m-d');
    }else{
        $date_str = strtotime($date);
        $date = date('Y-m-d',$date_str);
    }
    $db_config = array(
        'hostname'  => '127.0.0.1',
        'username'  => 'root',
        'password'  => 'root',
        'database'  => 'dmx_train',
        'pconnect'  => 0,
        'log'  => 0
    );
    $db = new DB($db_config);
    $train_date = $date.' 00:00:00';
    $train_sn = strtoupper($train_sn);
    //根据输入的车次 拿到 车次排班编号,始发站和终到站
    $train_sql = "select * from dmx_train_list where train_sn='{$train_sn}' and train_date='{$train_date}'";
    $train = $db->get_one($train_sql);
    if(empty($train)){
        msgReturn('未查到当日当次列车信息',-1);
    }
    //取出始发站和终到站的电码编号
    $from_station_name = $train['from_station'];
    $to_station_name = $train['to_station'];
    $from_station_sql = "select * from dmx_station_info where station_name='{$from_station_name}'";
    $to_station_sql = "select * from dmx_station_info where station_name='{$to_station_name}'";
    $from_station = $db->get_one($from_station_sql);
    if(empty($from_station)){
        msgReturn('未查到始发车站',-1);
    }
    $to_station = $db->get_one($to_station_sql);
    if(empty($to_station)){
        msgReturn('未查到终点车站',-1);
    }
    $param = [
        'train_no' => $train['train_no'],
        'from_station_telecode' => $from_station['station_telecode'],
        'to_station_telecode' => $to_station['station_telecode'],
        'depart_date' => $date,
    ];
    $http_param = http_build_query($param);
    $url = $url.$http_param;
    $header = array('User-Agent:Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.132 Safari/537.36');
    $data = curl_request($url,true,'GET',null,$header);
    if(!$data){
        msgReturn('网络错误',-1);
    }
    $data = json_decode($data,true);
    if(empty($data['data']['data'])){
        msgReturn('列车时刻表数据不存在',-1);
    }
    return $data['data']['data'];
}


/*$checi = 'g1207';
$data = get_train_timetable($checi,'2019-5-18');
print_r($data);die;*/

$now = date('Y-m-d');

if($_SERVER['REQUEST_METHOD'] == 'POST'){
    $train_no = trim($_POST['value1']);
    $train_date = trim($_POST['value2']);
    $data = get_train_timetable($train_no,$train_date);
    msgReturn($data);
}


?>
<html xmlns="">

<head>
    <meta http-equiv = "Content-Type" content = "text/html;charset = utf8">
    <meta name = "description" content = "列车时刻表">
    <title>列车时刻表-高铁动车运行时间查询</title>
    <script src="https://code.jquery.com/jquery-3.0.0.min.js"></script>
</head>
<style type="text/css">
    .key1{
        width:100px;
    }
    .value1{
        width:300px;
        margin:0 0 0 1px;
    }
    .main{
        margin:0 auto;
        width:450px;
        height:auto;
        background:#B4E4E4;
        padding:20px 40px;
        /*background: url("https://www.12306.cn/index/images/pic/banner08.jpg") bottom center repeat-y #efeff4 ;*/
    }
    .refer{
        width:100px;
        height:24px;
    }
    .h1-title{

    }
    .request-res{
        width:300px;
        margin:0 0 0 1px;
        display: none;
    }
    .train-table{
        margin-top: 10px;
        margin-left: 85px;
        display: none;
    }
    .train-table table{
        /*border: 1px solid gray;*/
        border-right: 1px solid gray;
        border-bottom: 1px solid gray;
    }
    .train-table table td{
        font-size: 14px;
        border-left: 1px solid gray;
        border-top: 1px solid gray;
    }
</style>
<body>

<div class="main">
    <h1 class="h1-title" align="center">列车时刻表</h1>
    <form method="POST" action="" target="_blank" id="form">
        <p>列车车次:
            <input class="value1" type="text" name="value1" value="" placeholder="列车车次 如:k16"></p>
        <p>发车日期:
            <input class="value1" type="text" name="value2" value="<?php echo $now; ?>" placeholder="发车时间"></p>
        <p class="request-res">查询结果:<span class="value1 res-return1">...</span></p>
        <div class="train-table">
            <table width="300" border="0" cellpadding="0" cellspacing="0" class="table-result">
                <!--<tr>
                    <td>序号</td>
                    <td>车站</td>
                    <td>到/发时间</td>
                    <td>停留</td>
                </tr>
                <tr>
                    <td>01</td>
                    <td>青岛</td>
                    <td>16:26-16:30</td>
                    <td>4分钟</td>
                </tr>-->
            </table>
        </div>
        <p style="text-align:center;"><input class="refer" type="submit" value="查询"></p>
    </form>
</div>
</body>
<script>
    $(function(){
        $("#form").submit(function(e){
            e.preventDefault();
            var data = {};
            data.value1 = $("input[name=value1]").val();
            data.value2 = $("input[name=value2]").val();
            $(".request-res").show();
            $.ajax({
                url:'train.php',
                data:data,
                dataType:'json',
                type:'post',
                success:function(ret){
                    //console.log(ret);

                    if(ret.error_no == 0){
                        var train_list_html = "<tr><td>序号</td><td>车站</td><td>到/发时间</td><td>停留</td></tr>";
                        $.each(ret.data,function(key,val){
                            //console.log(key+'----'+val.station_name);
                            //train_list_html += "<tr><td>序号</td><td>车站</td><td>到/发时间</td><td>停留</td></tr>";
                            train_list_html += "<tr><td>"+val.station_no+"</td><td>"+val.station_name+"</td><td>"+val.arrive_time+"-"+val.start_time+"</td><td>"+val.stopover_time+"</td></tr>";
                        });
                        var train_info = ret.data[0];
                        var train_text = train_info.station_train_code+"( "+train_info.start_station_name+"-"+train_info.end_station_name+" )";
                        $(".train-table").show();
                        $(".res-return1").html(train_text);
                        $(".request-res").css("color","green");
                        $(".table-result").html(train_list_html);
                    }else{
                        $(".train-table").hide();
                        $(".request-res").css("color","red");
                        $(".res-return1").html(ret.error_msg);
                    }
                },
                complete:function (info) {
                    //console.log('over:'+info);
                },
                error:function (err) {
                    //console.log('err:'+err);
                }
            })
        })
    })
</script>
</html>

 

  • 8
    点赞
  • 55
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值