Javascript Ajax/PHP/Json:缺少一个GET参数
我有一个问题,因为服务器端总是缺少一个参数(2个参数中的一个)(当我通过AJAX向它发送参数时) 我的JS代码如下所示:Javascript Ajax/PHP/Json:缺少一个GET参数,javascript,php,jquery,ajax,json,Javascript,Php,Jquery,Ajax,Json,我有一个问题,因为服务器端总是缺少一个参数(2个参数中的一个)(当我通过AJAX向它发送参数时) 我的JS代码如下所示: function import_websql(user_id) { var db = openDatabase("database", "1.0", "table", 2*1024*1024); var favourite_ids = ""; if (window.openDatabase){ db.transaction(
function import_websql(user_id) {
var db = openDatabase("database", "1.0", "table", 2*1024*1024);
var favourite_ids = "";
if (window.openDatabase){
db.transaction(
function(t){ // This is the callback with "t" as the transaction object
t.executeSql('SELECT * FROM favourites', [], function (t, results) {
var len = results.rows.length, i;
for (i = 0; i < len; i++) {
favourite_ids += results.rows.item(i).id + "t";
}
});
}, onError, onReadyTransaction(user_id,favourite_ids)
);
} else{
alert("Your smartphone is too weird!");
};
}
function onReadyTransaction(user_id,favourite_ids) {
alert(favourite_ids);
send_websql(user_id,favourite_ids)
}
function onError() {
alert("error");
}
function send_websql(user_id,favourite_ids){
$.ajax({
url: 'fct.import_websql.php',
type: 'GET',
data: {user_id: user_id, favourite_ids: favourite_ids},
dataType: 'json',
beforeSend: function(){
},
success: function(data)
{
if(data) {
alert(favourite_ids + "Worked!" + data);
}
else {
console.log("Error: " + data);
}
},
complete: function(data){
},
error: function(xhr,textStatus,err)
{
console.log("readyState: " + xhr.readyState);
console.log("responseText: "+ xhr.responseText);
console.log("status: " + xhr.status);
console.log("text status: " + textStatus);
console.log("error: " + err);
}
});
}
<?php
include_once('database_connect.php');
include_once('clean.php');
$user_id = clean($_GET['user_id']);
$favourite_ids = clean($_GET['favourite_ids']);
$favourite_ids_arr = explode('t', $favourite_ids);
array_pop($favourite_ids_arr);
foreach ($favourite_ids_arr as &$favourite_id) {
$sql = "INSERT INTO map_favourite_user_bookmark (map_favourite_user_bookmark_favourite_id, map_favourite_user_bookmark_user_id) VALUES ($favourite_id, $user_id)";
$result = mysql_query($sql) or die(mysql_error());
$sql = "UPDATE user_info SET user_websql_imported = 1 WHERE user_id = $user_id)";
$result = mysql_query($sql) or die(mysql_error());
}
$response = "ok" . $favourite_ids;
echo json_encode($response);
?>
函数导入\u websql(用户id){
var db=openDatabase(“数据库”、“1.0”、“表”,2*1024*1024);
var_id=“”;
if(window.openDatabase){
数据库事务(
函数(t){//这是以“t”作为事务对象的回调
t、 executeSql('从收藏夹中选择*,[],函数(t,结果){
var len=results.rows.length,i;
对于(i=0;i
我的PHP看起来像:
function import_websql(user_id) {
var db = openDatabase("database", "1.0", "table", 2*1024*1024);
var favourite_ids = "";
if (window.openDatabase){
db.transaction(
function(t){ // This is the callback with "t" as the transaction object
t.executeSql('SELECT * FROM favourites', [], function (t, results) {
var len = results.rows.length, i;
for (i = 0; i < len; i++) {
favourite_ids += results.rows.item(i).id + "t";
}
});
}, onError, onReadyTransaction(user_id,favourite_ids)
);
} else{
alert("Your smartphone is too weird!");
};
}
function onReadyTransaction(user_id,favourite_ids) {
alert(favourite_ids);
send_websql(user_id,favourite_ids)
}
function onError() {
alert("error");
}
function send_websql(user_id,favourite_ids){
$.ajax({
url: 'fct.import_websql.php',
type: 'GET',
data: {user_id: user_id, favourite_ids: favourite_ids},
dataType: 'json',
beforeSend: function(){
},
success: function(data)
{
if(data) {
alert(favourite_ids + "Worked!" + data);
}
else {
console.log("Error: " + data);
}
},
complete: function(data){
},
error: function(xhr,textStatus,err)
{
console.log("readyState: " + xhr.readyState);
console.log("responseText: "+ xhr.responseText);
console.log("status: " + xhr.status);
console.log("text status: " + textStatus);
console.log("error: " + err);
}
});
}
<?php
include_once('database_connect.php');
include_once('clean.php');
$user_id = clean($_GET['user_id']);
$favourite_ids = clean($_GET['favourite_ids']);
$favourite_ids_arr = explode('t', $favourite_ids);
array_pop($favourite_ids_arr);
foreach ($favourite_ids_arr as &$favourite_id) {
$sql = "INSERT INTO map_favourite_user_bookmark (map_favourite_user_bookmark_favourite_id, map_favourite_user_bookmark_user_id) VALUES ($favourite_id, $user_id)";
$result = mysql_query($sql) or die(mysql_error());
$sql = "UPDATE user_info SET user_websql_imported = 1 WHERE user_id = $user_id)";
$result = mysql_query($sql) or die(mysql_error());
}
$response = "ok" . $favourite_ids;
echo json_encode($response);
?>
有趣的是,在我发送数据之前,在JS端,所有东西都存在(并且会被警告
),但在PHP端,最喜欢的ID
完全丢失(不能回送它们,不能处理它们,而且它们不会被退回…就像它们不存在一样)
我做错了什么?您的问题是数据库API是异步的,因此您将在数据库事务尚未完成时执行ajax调用
一种解决方法是将ajax调用放在查询函数的回调中。$recipe\u ids\$favorite\u ids搞乱了变量重命名确切地说,当您可以很容易地将json编码的数组发送到客户端时,为什么要构建一个t
分隔的字符串?这将消除任何构建字符串/分解的需要,再加上字符串自然包含t
的可能性,这将导致分解在错误的位置拆分内容。@Dagon谢谢,但我最近更改了它们。在我的代码中,它们都有相同的变量名,这不是问题所在!所以你发布了你没有实际使用的代码,并希望我们能够帮助你调试它?@MarcB抱歉,我做了这个“又快又脏”,因为这个功能(导入websql数据库)只需要几天就可以了谢谢。我用你建议的改进更新了我的问题,但现在它已经丢失了JS端的收藏夹ID
。@JohnBrunner这听起来像是个错误,你在控制台中收到任何消息了吗。在原始代码下发布修改后的代码也会有帮助。问题是myonReadyTransaction
比sql
函数中for
循环后的代码要快。现在,我在executeSql
中的for
循环后进行了一次函数调用,现在一切正常!谢谢你的评论!