0

简单的问题伙计们,我有 AJAX 可以从页面中获取所有数据,并且它假设打开新的 php 页面来更新 MySQL 数据库,它只更新最后一行数据,但是当我使用来自 javascript 的警报来检查我得到的所有数据时,他做了更新整个表......是否有可能 AJAX 工作速度不够快或其他什么?

这是我的代码

var request_type;
var browser = navigator.appName;

if (browser == "Microsoft Internet Explorer") {
    request_type = new ActiveXObject("Microsoft.XMLHTTP");
}
else {
    request_type = new XMLHttpRequest();
}

var http = request_type;

var MatchID = '';
var HomeTeam = '';
var AwayTeam = '';
var TipID = '';
var arrayMaxValues = 3;
var myArray = new Array(3);
var i = 0;
$('#teams_table input[type=text]').each(function () {

        myArray[i] = $(this).val();

        if (!!myArray[2]) 
        {
                 MatchID = myArray[0];
                 HomeTeam = myArray[1];
                 AwayTeam = myArray[2];


           if (HomeTeam > AwayTeam) {
                  TipID = 1;
           }
           else if (HomeTeam == AwayTeam) {
                  TipID = 2;
           }
           else if (HomeTeam < AwayTeam) {
                  TipID = 3;
           }



           http.open('get', 'adminUpdate.php?MatchID=' + MatchID + '&TipID=' + 
           TipID + '&HomeTeam=' + HomeTeam + '&AwayTeam=' + AwayTeam, true);
           http.send(null);

           myArray = new Array(3);
           i=0;

        }
        else
        {
         i++;
        }

});

我用的时候有点奇怪

 alert('MatchID = ' + MatchID + ' HomeTeamScore = ' + HomeTeam + ',
 AwayTeamScore = ' + AwayTeam)

在 AJAX 代码内部,我更新了整个表,没有它只是最后一行

还有我的php页面

<?php

include('config.php');

$matchID = $_GET['MatchID'];
$tipID = $_GET['TipID'];
$HomeScore = $_GET['HomeTeam'];
$AwayScore = $_GET['AwayTeam'];

$query="update probatip1.matches set ResultTipID=".$tipID.",HomeTeamScore = "
.$HomeScore.",AwayTeamScore= ".$AwayScore." where MatchID =".$matchID;

$UpdateGame= mysql_query($query) or die(mysql_error());

mysql_close()

?> 
4

4 回答 4

1

尝试对数据进行编码。IE:

MatchID = encodeURIComponent(myArray[0]);
HomeTeam = encodeURIComponent(myArray[1]);
AwayTeam = encodeURIComponent(myArray[2]);

在php中使用

function escapedata($data) {
    if(get_magic_quotes_gpc()) {
        $data= stripslashes($data);
    }
    return mysql_real_escape_string($data);
}

在更新表之前转义您的数据。IE:

$query="update probatip1.matches set ResultTipID=".escapedata($tipID).",HomeTeamScore = ".escapedata($HomeScore).",AwayTeamScore= ".escapedata($AwayScore)." where MatchID =".escapedata($matchID);

希望这有效。

于 2012-08-31T01:30:36.093 回答
1

不是真正的直接答案,只是您可以从中得出答案的东西。代码所做的是使用 jquery 中的方法提交整​​个对象,该$.post方法接受 2 个参数和一个回调函数,该函数在请求完成后执行。不太确定:打开新的 php 页面以更新 MySQL 数据库,但我假设您只是使用该页面来更新数据库,而不是实际打开它。

<script src="js/jquery.min.js"></script>
<script>
var obj = {
    'teams' : [
        {'name' : 'teamA', 'grade' : 'A'},
        {'name' : 'teamB', 'grade' : 'B'}
    ]
};

$.post('access.php', {'obj' : obj}, function(data){
    var d = JSON.parse(data);
    for(var x in d){
        console.log(d[x].name);
    }
});
</script>

访问.php:

<?php
$post = $_POST['obj']['teams'];
$array = [];
foreach($post as $row){
    $name =  $row['name'];
    $grade = $row['grade'];

    $array[] = ['name'=>$name, 'grade'=>$grade];
}

echo json_encode($array);
?>

因此,您只需修改 php 页面,并将您的数据库查询放入循环中。这样你就不需要通过把它放在里面来执行这么多的ajax请求$.each

然后利用$.each通过方法构建您将通过 ajax 提交的对象$.post

var obj = {};
$().each(function(index){
     var myArray[i] = $(this).val();

     var MatchID = myArray[0];
     var HomeTeam = myArray[1];
     var AwayTeam = myArray[2];

     obj[index] = [];
     obj[index]['match_id'] = MatchID;
});
于 2012-08-31T01:46:03.557 回答
0

伙计们,在您的帮助下,我设法解决了我的问题

http.open('get', 'adminUpdate.php?MatchID=' + MatchID + '&TipID=' + TipID + 
'&HomeTeam=' + HomeTeam + '&AwayTeam=' + AwayTeam, false);
http.send(null);
var response = http.responseText;

所以基本上用这一行我告诉http请求不要去下一行代码,直到表中的更新没有完成,当http完成他的工作时,它会移动到下一行代码。

谢谢你的帮助

于 2012-09-03T16:25:08.610 回答
0

问题在于您向 php 文件发送请求以更新MYSQL. 实际上,您是ajax在循环中运行请求,并且循环太快会杀死先前的更新请求。

解决方案

您可以组成一个数组并将其发送到php循环外部。这对你有用。

于 2012-08-31T01:46:25.990 回答