Javascript AJAX和MYSQL,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

我正在开发一个php/mysql应用程序,我试图使用window.onerror将javascript错误收集到数据库中,在该函数中,我向php脚本发出ajax请求,该脚本将错误记录到数据库中。然而,当我测试它时,应该记录了13个错误,但只有一个被插入到数据库中。所有13个ajax请求都返回200 OK,这是因为ajax对于mysql查询来说太快了,无法处理任何内容。我尝试在发送请求上使用设置超时,但似乎不起作用

这是我的密码:

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);