Javascript AJAX和MYSQL,AJAX对MYSQL查询来说太快了吗?
我正在开发一个php/mysql应用程序,我试图使用window.onerror将javascript错误收集到数据库中,在该函数中,我向php脚本发出ajax请求,该脚本将错误记录到数据库中。然而,当我测试它时,应该记录了13个错误,但只有一个被插入到数据库中。所有13个ajax请求都返回200 OK,这是因为ajax对于mysql查询来说太快了,无法处理任何内容。我尝试在发送请求上使用设置超时,但似乎不起作用 这是我的密码:Javascript AJAX和MYSQL,AJAX对MYSQL查询来说太快了吗?,javascript,php,mysql,ajax,Javascript,Php,Mysql,Ajax,我正在开发一个php/mysql应用程序,我试图使用window.onerror将javascript错误收集到数据库中,在该函数中,我向php脚本发出ajax请求,该脚本将错误记录到数据库中。然而,当我测试它时,应该记录了13个错误,但只有一个被插入到数据库中。所有13个ajax请求都返回200 OK,这是因为ajax对于mysql查询来说太快了,无法处理任何内容。我尝试在发送请求上使用设置超时,但似乎不起作用 这是我的密码: window.onerror = function(msg, ur
window.onerror = function(msg, url, line)
{
function createXHR()
{
try { return new XMLHttpRequest(); } catch(e) {}
try { return new ActiveXObject("Msxml2.XMLHTTP.6.0"); } catch (e) {}
try { return new ActiveXObject("Msxml2.XMLHTTP.3.0"); } catch (e) {}
try { return new ActiveXObject("Msxml2.XMLHTTP"); } catch (e) {}
try { return new ActiveXObject("Microsoft.XMLHTTP"); } catch (e) {}
return null;
}
function sendRequest(url, payload)
{
var xhr = createXHR();
if (xhr)
{
xhr.open("POST",url,true);
xhr.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
xhr.onreadystatechange = function(){
if (xhr.readyState == 4 && xhr.status == 200){
console.log(xhr.responseText);
}
};
xhr.send(payload);
}
}
function encodeValue(val)
{
var encodedVal;
if (!encodeURIComponent)
{
encodedVal = escape(val);
/* fix the omissions */
encodedVal = encodedVal.replace(/@/g, '%40');
encodedVal = encodedVal.replace(/\//g, '%2F');
encodedVal = encodedVal.replace(/\+/g, '%2B');
}
else
{
encodedVal = encodeURIComponent(val);
/* fix the omissions */
encodedVal = encodedVal.replace(/~/g, '%7E');
encodedVal = encodedVal.replace(/!/g, '%21');
encodedVal = encodedVal.replace(/\(/g, '%28');
encodedVal = encodedVal.replace(/\)/g, '%29');
encodedVal = encodedVal.replace(/'/g, '%27');
}
/* clean up the spaces and return */
return encodedVal.replace(/\%20/g,'+');
}
if (window.XMLHttpRequest) {
var master = "llesmana@ucsd.edu";
var payload = "msg=" + encodeValue(msg) + '&url=' + encodeValue(url) + "&line=" + encodeValue(line) + "&master=" + encodeValue(master);
var url_req = "http://104.131.199.129:83/php/log_error.php";
sendRequest(url_req, payload);
return true;
}
return false;
}
PHP:
我解决了这个问题,显然我忘了使用mysqli\u real\u escape\u string()。将mysql\u error()
更改为mysqli\u error($db)
AJAX
是异步的,这意味着它不能“太快”。取决于您的Javascript
代码的外观,但是如果您正确地编码了它,每个AJAX
-请求都会使用它自己的PHP
代码“实例”发送到服务器。
<?php
/**
* Created by PhpStorm.
* User: xxvii27
* Date: 9/2/14
* Time: 12:30 PM
*/
/* Helper functions */
function gpc($name)
{
if (isset($_GET[$name]))
return $_GET[$name];
else if (isset($_POST[$name]))
return $_POST[$name];
else if (isset($_COOKIE[$name]))
return $_COOKIE[$name];
else
return "";
}
//Database Connection
function connectDB (){
define('DB_HOST', 'localhost');
define('DB_NAME', 'userinfo');
define('DB_USER','root');
define('DB_PASSWORD','ohanajumba');
$con=mysqli_connect(DB_HOST,DB_USER,DB_PASSWORD, DB_NAME) or die("Failed to connect to MySQL: " . mysql_error() );
return $con;
}
function logError($occured, $name, $line, $master, $url, $db){
$command="INSERT INTO errors (id, occured, name, url, line, master) VALUES (NULL, '$occured', '$name', '$url','$line', '$master')";
mysqli_query($db, $command) or die(mysql_error());
}
$db = connectDB();
$message = htmlentities(substr(urldecode(gpc("msg")),0,1024));
$url = htmlentities(substr(urldecode(gpc("url")),0,1024));
$line = htmlentities(substr(urldecode(gpc("line")),0,1024));
$master = htmlentities(substr(urldecode(gpc("master")),0,1024));
$date = date('Y-m-d G:i:s', time());
logError($date, $message, $line, $master, $url, $db);
mysqli_close($db);