Javascript Ajax/PHP/Json:缺少一个GET参数

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(

我有一个问题,因为服务器端总是缺少一个参数(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(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这听起来像是个错误,你在控制台中收到任何消息了吗。在原始代码下发布修改后的代码也会有帮助。问题是my
onReadyTransaction
sql
函数中
for
循环后的代码要快。现在,我在
executeSql
中的
for
循环后进行了一次函数调用,现在一切正常!谢谢你的评论!