You need to enable JavaScript to run this app. 如何调整jQuery执行顺序 让AJAX获取图片参数先于本地数据库插入执行
优惠活动
大模型
产品
解决方案
定价
更多

如何调整jQuery执行顺序 让AJAX获取图片参数先于本地数据库插入执行

执行顺序调整方案

问题根因

  • $.ajax 默认是异步执行模式,不会阻塞后续代码运行,请求发送后就会直接执行后面的数据库插入逻辑
  • 原有代码中getPicture的return语句写在AJAX的success回调内,返回值无法传递到外层的newpic变量,函数本身默认返回undefined
  • 数据库插入操作没有等待AJAX请求返回结果就触发,必然出现执行顺序颠倒的问题

修正方案

将AJAX请求封装为Promise对象,配合async/await语法控制执行流程,确保拿到图片名称后再执行SQL插入操作。

1. 改造getPicture函数

function getPicture(zItemID) {
  // 返回Promise对象,用于后续等待请求结果
  return new Promise((resolve, reject) => {
    $.ajax({
      type: "POST",
      url : '/get_new_picture.php?IT=' + zItemID,
      dataType: "json",
      success: function(data) {
          alert('PIC: ' + data );
          resolve(data); // 请求成功时返回图片名称
      },
      error: function(err) {
          alert('获取图片失败');
          // 若需要不中断流程可以走降级逻辑,比如返回默认图片名
          // resolve('default_pic.png');
          reject(err); // 若需要中断流程则抛出错误
      }
    });
  })
}

2. 改造表单提交点击事件

// 回调函数增加async关键字,支持内部使用await语法
$("#submit_item").click(async function(e){
    e.preventDefault();
    var prodID = $("#i_admin_prodID").val();
    var userID = $("#i_admin_uid").val();
    var drawSize = $("#i_admin_dSize").val();
    var pocket = $("#i_admin_pocket").val();
    var orgItemID = $("#i_admin_orgItemID").val();
    var itemID = $("#admin_item_id").val();
    let newpic = ''; // 初始化图片名称变量
    if ( itemID ) {
      // 等待AJAX请求返回结果后,再执行后续代码
      newpic = await getPicture(itemID);
    }
    // 拿到newpic后再执行数据库插入操作
    db.transaction(function (tx) {
        // INSERT语句中直接使用已经赋值完成的newpic变量即可
        tx.executeSql("INSERT INTO vend_products ...")
      }, function(error) {
        alert("error" + error.message);
      }, function() {
        sendOrdertoEmail();
    });
}); 

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.12 16:24:03