简单问题的家伙,我有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()
?>
答案 0 :(得分:1)
尝试编码数据。即:
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);
}
在更新表之前转义数据。即:
$query="update probatip1.matches set ResultTipID=".escapedata($tipID).",HomeTeamScore = ".escapedata($HomeScore).",AwayTeamScore= ".escapedata($AwayScore)." where MatchID =".escapedata($matchID);
希望这有效。
答案 1 :(得分: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>
access.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页面,并将数据库查询放在循环中。这样,您就不需要通过将其放在$.each
然后利用$.each
构建您要通过$.post
方法通过ajax提交的对象:
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;
});
答案 2 :(得分:0)
问题在于您向php文件发送请求以更新MYSQL
的方式。实际上,您正在循环中运行ajax
请求,并且循环太快而无法终止先前的更新请求。
<强>解决方案强>
您可以编写一个数组并将其发送到循环外的php
。这对你有用。
答案 3 :(得分:0)
在你的帮助下,我设法解决了我的问题
http.open('get', 'adminUpdate.php?MatchID=' + MatchID + '&TipID=' + TipID +
'&HomeTeam=' + HomeTeam + '&AwayTeam=' + AwayTeam, false);
http.send(null);
var response = http.responseText;
基本上这行我告诉http请求不要去下一行代码,直到表中的更新没有完成,当http完成他的工作然后它移动到下一行代码。
感谢您的帮助