jQuery .ajax成功回调返回undefined,疑似PHP脚本未执行?
问题:Ajax提交表单返回"undefined"且数据未插入
近期大量用户反馈网站多个不同的Ajax提交表单均返回“undefined”响应,具体情况如下:
现象
- Ajax的success函数触发,页面显示绿色的“undefined”消息
- PHP脚本无报错信息,error_log中无相关记录,但数据从未插入,仿佛提交时脚本未运行
- 问题涉及网站中多个Ajax调用搭配PHP脚本的变体
相关代码
Ajax提交示例
//Post Request via Ajax jQuery.ajax({ url: submissionurl, type: "POST", data: { deckDescription : deckDescription, deckExcerpt : deckExcerpt, deckformat : deckformat, youtubeLink : youtubeLink, maindeckarray : JSON.stringify(maindeckarray), maindeckarray_og : JSON.stringify(maindeckarrayog), maindecknamesarray : JSON.stringify(maindeckNamearray), extradeckarray : JSON.stringify(extradeckarray), sidedeckarray : JSON.stringify(sidedeckarray), submit_date : today, coverCard : coverCard, deckSourceName : deckSourceName, deckSourceURL : deckSourceURL, publicDeck : publicDeck, decknumber : decknumber }, success:function(response) { jQuery('#notifyToastSubmit .toast-body').html('<span style="color:green">'+response.success+'</span>'); jQuery('#notifyToastSubmit').toast('show'); jQuery('form :input[type="submit"], form :input[type="text"], textarea').prop('disabled', true).css({"background-color" : "grey", "cursor" : "not-allowed"}); }, error: function(xhr, status, error) { var err = JSON.parse(xhr.responseText); jQuery('#notifyToast .toast-body').html(err.error); jQuery('#notifyToast').toast('show'); jQuery('form :input[type="submit"]').prop('disabled', false); } });
PHP成功响应代码
http_response_code(200); header('Content-Type: application/json'); echo json_encode(array("success" => "Your deck has been submitted! You can view your submitted deck <a href='https://ygoprodeck.com/deck/".$prettyurl."' class='deckLink'>here</a>.")); exit();
PHP错误响应代码
http_response_code(400); header('Content-Type: application/json'); echo json_encode(array("error" => "You must have at least 40 cards in your Main Deck.")); exit();
已排查内容
- 检查服务器modsec日志和Cloudflare防火墙日志,未发现脚本被拦截的情况
- 本地测试该系统数月,从未遇到此错误
临时修改方案
已对Ajax调用的success回调做如下修改,等待用户反馈确认是否解决问题:
success:function(response) { if(!response.success){ var returnmsg = "An error has occurred when submitting. Please try to hit the submit button again."; }else{ var returnmsg = response.success; jQuery('form :input[type="submit"], form :input[type="text"], textarea').prop('disabled', true).css({"background-color" : "grey", "cursor" : "not-allowed"}); } jQuery('#notifyToastSubmit .toast-body').html('<span style="color:green">'+returnmsg+'</span>'); jQuery('#notifyToastSubmit').toast('show'); }
内容的提问来源于stack exchange,提问作者GenesisBits
相关产品推荐
相关产品推荐

