javascript - Ajax /PHP/JSON : One GET parameter is missing

标签 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(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 看起来像:

<?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 端,一切都存在(并且会被 alert),但在 PHP 端,favourite_ids 是完全丢失(不能 echo 它们,不能处理它们,并且它们不会被归还......就像它们不存在一样)。

我做错了什么?

最佳答案

您的问题是数据库 API 是异步的,因此您将在数据库事务尚未完成时执行您的 ajax 调用。

解决它的一种方法是将 ajax 调用放在查询函数的回调中。

关于javascript - Ajax /PHP/JSON : One GET parameter is missing,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21123060/

相关文章:

javascript - 无法找到字符串中字母的位置

php - Javascript倒计时和PHP日期

javascript - AngularJS 不显示 ng-repeat,只显示一个空列表

php - 在字符串中查找确切的字符串

php - 在 SELECT 语句中按字符长度匹配

php - 根据选择值显示和删除子文件夹中的文件

jQuery 就地反弹

javascript - 通过javascript更改div id

javascript - 如何获取警报框中的 div 内容或存储为变量?

javascript - 页面上 jquery 支持的 UI 的最佳实践?