You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Linux wget后台写入数据库及jQuery调用WebService JSON响应问题

解决两个问题:Linux后台获取JSON写入数据库 + jQuery脚本交互故障

你提到现在有两个相关的需求和问题:一是想用Linux的wget从WebService拿到JSON响应,然后把数据写入数据库,还要后台执行;二是你写的jQuery脚本在和WebService交互(提交JSON、接收JSON返回)时出了问题,咱们分别来解决这两部分。

一、Linux后台获取JSON并写入数据库的实现方案

要完成这个需求,咱们可以写个shell脚本,把wget、JSON解析、数据库写入的逻辑串起来,再让脚本后台运行,具体步骤如下:

  1. 编写shell脚本(比如命名为fetch_sales_to_db.sh)
    脚本里先通过wget拉取JSON数据,用jq(一款非常好用的JSON解析工具)提取需要的字段,再调用mysql客户端把数据写入数据库。示例代码如下:

    #!/bin/bash
    # 配置参数,根据你的实际情况修改
    API_URL="https://api.xxxxxxxxxxxxxxxxxxx/DailySales?FromDate=2024-01-01%2000:01:00&ToDate=2024-01-02%2000:01:00"
    TEMP_JSON="/tmp/daily_sales_temp.json"
    DB_USER="你的数据库用户名"
    DB_PASS="你的数据库密码"
    DB_NAME="你的数据库名"
    
    # 用wget静默拉取JSON到临时文件,后台执行
    wget -q -O $TEMP_JSON $API_URL &
    
    # 等待wget任务完成
    wait $!
    
    # 用jq解析JSON(假设返回的是数组,每个元素包含sale_id、amount、sale_date字段)
    # 遍历解析后的数据,逐条写入mysql
    jq -r '.[] | "\(.sale_id)\t\(.amount)\t\(.sale_date)"' $TEMP_JSON | while read -r sale_id amount sale_date; do
        mysql -u$DB_USER -p$DB_PASS $DB_NAME -e "INSERT INTO sales (id, amount, sale_date) VALUES ('$sale_id', '$amount', '$sale_date');"
    done
    
    # 清理临时文件
    rm $TEMP_JSON
    

    几个注意点:

    • 先安装jq:Debian/Ubuntu用apt install jq,CentOS/RHEL用yum install jq
    • URL里的空格要转成%20,不然wget会解析出错
    • 明文写数据库密码不安全,推荐用~/.my.cnf配置文件存储认证信息,这样脚本里可以去掉-p$DB_PASS
  2. 让脚本后台执行
    用nohup命令让脚本在后台运行,即使你退出终端也能继续执行:

    nohup ./fetch_sales_to_db.sh > /dev/null 2>&1 &
    

    这样脚本就会在后台默默完成数据获取和写入的工作了。

二、前端jQuery脚本的问题排查与修复

看你贴的代码片段,发现几个可能导致故障的点,咱们逐一修正:

  1. URL参数的转义问题
    你拼接URL时用了&(这是HTML转义字符)和空格,在JavaScript里应该直接用&,并且对包含空格的参数用encodeURIComponent转义,避免请求失败:

    // 正确的URL拼接方式
    var fromDateStr = date_from + " 00:01:00";
    var toDateStr = date_to + " 00:01:00";
    self.productURI = 'https://api.xxxxxxxxxxxxxxxxxxx/DailySales?FromDate=' + encodeURIComponent(fromDateStr) + '&ToDate=' + encodeURIComponent(toDateStr);
    
  2. 未完成的AJAX函数逻辑
    你代码里的self.getAllProducts函数调用了未定义的self.pobierz_dane_aja,应该是没写完AJAX请求逻辑。完整的AJAX请求应该这样写(假设API是GET请求):

    self.getAllProducts = function () {
        $.ajax({
            url: self.productURI,
            type: 'GET', // 如果API要求POST,改成POST即可
            dataType: 'json', // 告诉jQuery自动把响应解析成JSON对象
            success: function(response) {
                self.products = response; // 把返回的JSON数据赋值给products数组
                // 这里可以加渲染页面的逻辑,比如把数据展示到productsDiv里
                $(self.productsDiv).html(JSON.stringify(self.products));
            },
            error: function(xhr, status, error) {
                console.error('请求出错啦:', status, error);
                // 这里可以加前端错误提示,比如给用户弹个消息
            }
        });
    };
    
  3. 跨域问题(如果存在)
    如果你的前端页面和API域名不一样,会遇到跨域限制。这时候需要后端API配置CORS(跨域资源共享),或者用代理服务器转发请求。本地开发时可以在AJAX配置里加crossDomain: true,但最终还是需要后端配合开启CORS。

内容的提问来源于stack exchange,提问作者Krzysztof Krajewski

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.20 10:24:42