jQuery调用addEntryDatabase方法返回undefined问题求解
问题原因
- 语法错误:
$.ajax的配置参数中,data: data行末尾缺少英文逗号,会导致JS解析配置项失败,函数执行逻辑异常。 - 赋值逻辑缺失:你声明了
entryId变量但没有在任何位置给它赋值,即使你设置了async: false让AJAX同步执行,success回调为空的情况下entryId始终是初始的undefined,返回自然也是undefined。你说控制台能拿到entryId的值,大概率是调试过程中全局作用域下有同名变量,或者你实际测试的代码里给entryId赋值了但粘贴代码时漏掉了success里的赋值逻辑。 - 额外不规范点:
async: false已经被主流浏览器逐步废弃,会阻塞整个页面主线程,导致用户操作无响应,非常不建议使用。
修复方案
方案1:同步写法(仅临时兼容旧逻辑,不推荐)
function addEntryDatabase(data){ var entryId; $.ajax({ url: "model/script_ajout.php", async: false, type: "POST", dataType: 'html', data: data, // 补全缺失的逗号 success: function(res) { // 假设接口返回的res就是生成的entryId,这里给变量赋值 entryId = res; }, error: function(){ console.log('An error occurred while adding data to the database.'); } }); return entryId; }
方案2:异步Promise写法(推荐)
function addEntryDatabase(data){ // 返回Promise实例,外部用await或者then获取结果 return new Promise((resolve, reject) => { $.ajax({ url: "model/script_ajout.php", type: "POST", dataType: 'html', data: data, success: function(res) { resolve(res); // 把返回的id抛给外部调用方 }, error: function(){ console.log('An error occurred while adding data to the database.'); reject(); } }); }) } // 调用方式1:用.then处理返回结果 addEntryDatabase(data).then(user_id => { console.log(user_id); // 所有依赖user_id的后续逻辑都写在这里 }) // 调用方式2:用async/await,写法更接近同步逻辑 async function yourBusinessFunction() { try { const user_id = await addEntryDatabase(data); console.log(user_id); // 后续业务逻辑 } catch (e) { // 处理请求失败的场景 } }
内容的提问来源于stack exchange,提问作者Beko
相关产品推荐
相关产品推荐

