从ajax错误处理中获取单独的字符串

时间:2018-06-24 10:02:44

标签: javascript php ajax codeigniter

我有响应文本,来自Ajax Error.responseText。

error: function (data) {
             alert(data.responseText);
            }

data.responseText =

中的值
"<!DOCTYPE html>\n<html lang=\"en\">\n<head>\n<title>Database Error</title>\n<style type=\"text/css\">\n\n::selection{ background-color: #E13300; color: white; }\n::moz-selection{ background-color: #E13300; color: white; }\n::webkit-selection{ background-color: #E13300; color: white; }\n\nbody {\n\tbackground-color: #fff;\n\tmargin: 40px;\n\tfont: 13px/20px normal Helvetica, Arial, sans-serif;\n\tcolor: #4F5155;\n}\n\na {\n\tcolor: #003399;\n\tbackground-color: transparent;\n\tfont-weight: normal;\n}\n\nh1 {\n\tcolor: #444;\n\tbackground-color: transparent;\n\tborder-bottom: 1px solid #D0D0D0;\n\tfont-size: 19px;\n\tfont-weight: normal;\n\tmargin: 0 0 14px 0;\n\tpadding: 14px 15px 10px 15px;\n}\n\ncode {\n\tfont-family: Consolas, Monaco, Courier New, Courier, monospace;\n\tfont-size: 12px;\n\tbackground-color: #f9f9f9;\n\tborder: 1px solid #D0D0D0;\n\tcolor: #002166;\n\tdisplay: block;\n\tmargin: 14px 0 14px 0;\n\tpadding: 12px 10px 12px 10px;\n}\n\n#container {\n\tmargin: 10px;\n\tborder: 1px solid #D0D0D0;\n\t-webkit-box-shadow: 0 0 8px #D0D0D0;\n}\n\np {\n\tmargin: 12px 15px 12px 15px;\n}\n</style>\n</head>\n<body>\n\t<div id=\"container\">\n\t\t<h1>A Database Error Occurred</h1>\n\t\t<p>Error Number: 1062</p><p>Duplicate entry '60-2017' for key 'PRIMARY'</p><p>INSERT INTO `table` (`f1`, `f2`, `f3`, `f4`) VALUES ('60', '2017', '60_2017_Permohonan_d2030211.pdf', '2018-06-24 16:43:49')</p><p>Filename: /Applications/XAMPP/xamppfiles/htdocs/fol/models/rek/m_rek.php</p><p>Line Number: 47</p>\t</div>\n</body>\n</html>"

如何从上面的文本中提取文本“错误号:1062” ??

谢谢

3 个答案:

答案 0 :(得分:1)

您也可以使用DOMParser

错误号的文本位于ID为div的{​​{1}}内,并且是第一个container,因此您可以使用querySelector来获取该元素。

您的代码看起来像

<p>

error: function (data) {
    let parser = new DOMParser();
    let doc = parser.parseFromString(data.responseText, "text/html");
    alert(doc.querySelector("#container p").innerHTML);
}

答案 1 :(得分:0)

希望此代码段对您有所帮助。

var responseData = "<!DOCTYPE html>\n<html lang=\"en\">\n<head>\n<title>Database Error</title>\n<style type=\"text/css\">\n\n::selection{ background-color: #E13300; color: white; }\n::moz-selection{ background-color: #E13300; color: white; }\n::webkit-selection{ background-color: #E13300; color: white; }\n\nbody {\n\tbackground-color: #fff;\n\tmargin: 40px;\n\tfont: 13px/20px normal Helvetica, Arial, sans-serif;\n\tcolor: #4F5155;\n}\n\na {\n\tcolor: #003399;\n\tbackground-color: transparent;\n\tfont-weight: normal;\n}\n\nh1 {\n\tcolor: #444;\n\tbackground-color: transparent;\n\tborder-bottom: 1px solid #D0D0D0;\n\tfont-size: 19px;\n\tfont-weight: normal;\n\tmargin: 0 0 14px 0;\n\tpadding: 14px 15px 10px 15px;\n}\n\ncode {\n\tfont-family: Consolas, Monaco, Courier New, Courier, monospace;\n\tfont-size: 12px;\n\tbackground-color: #f9f9f9;\n\tborder: 1px solid #D0D0D0;\n\tcolor: #002166;\n\tdisplay: block;\n\tmargin: 14px 0 14px 0;\n\tpadding: 12px 10px 12px 10px;\n}\n\n#container {\n\tmargin: 10px;\n\tborder: 1px solid #D0D0D0;\n\t-webkit-box-shadow: 0 0 8px #D0D0D0;\n}\n\np {\n\tmargin: 12px 15px 12px 15px;\n}\n</style>\n</head>\n<body>\n\t<div id=\"container\">\n\t\t<h1>A Database Error Occurred</h1>\n\t\t<p>Error Number: 1062</p><p>Duplicate entry '60-2017' for key 'PRIMARY'</p><p>INSERT INTO `table` (`f1`, `f2`, `f3`, `f4`) VALUES ('60', '2017', '60_2017_Permohonan_d2030211.pdf', '2018-06-24 16:43:49')</p><p>Filename: /Applications/XAMPP/xamppfiles/htdocs/fol/models/rek/m_rek.php</p><p>Line Number: 47</p>\t</div>\n</body>\n</html>";
        
console.log($(responseData ).find("#container,p").first().text());

答案 2 :(得分:0)

应该是这样的:

您可以通过使用JavaScript函数exec()

来获取它
error: function (data) 
{
   var errorText = /Error Number:\s\d*/.exec(data.responseText);
   alert(errorText);
}

工作演示:https://jsfiddle.net/o2be0md6/4/

更多信息:https://www.w3schools.com/jsref/jsref_regexp_exec.asp