通过 $.ajax() 使用 GET 将数据存储到数据库

Store data to database using GET via $.ajax()

我想使用 $.ajax() 将一些 GET 保存到我的数据库,但数据只有 returns 为空。这是我的代码:

$.ajax({
    url: 'file.php?data=',
    type: 'GET',

    data: {
        f: $('input[name="textfield"]').val(),
        c: $('#coordinates').html(),
        a: $('#address').html()
    },

    success: function(s) {
        console.log(s);
    }
});

PHP 部分如下所示:

if(isset($_GET['data'])) {
    echo $_GET['f'].' - '.$_GET['c'].' - '.$_GET['a'];
}

仅此代码 returns --。我错过了什么?

更新 Chrome中开发者工具的网络选项卡中的link显示如下:http://.../send/data?f=hello&c=62.3875%2C+16.325556&a=KLOCKEN+520%2C+840+13+Tor‌​pshammar%2C+Sverigesend/datafile.php?data=)。但是当我用 var_dump($_GET) 替换 echo $_GET['f']... 时,它会打印以下内容:

array(1) {
  ["data"]=>
  string(0) ""
}

为什么我无法使用上面的代码从 $_GET['f']$_GET['c']$_GET['a'] 获取数据?

你的 JS 应该是:

$.ajax({
    url: "file.php",
    type: "GET",
    data: ...
});

您不需要额外的 ?data= 作为 URL 的一部分。这将由 jQuery 为您生成。有了它,您将覆盖您的 GET 请求。所以,从你发布的 URL 可以看出,你发布了一个没有值的键 "data",所以你的 vardump 确实向你显示了一个没有值的键 "data"。

您的 PHP 应该是:

if(isset($_GET['f']) && isset($_GET['c']) && isset($_GET['a'])) {
    echo $_GET['f'].' - '.$_GET['c'].' - '.$_GET['a'];
}

"data" 只是 jQuery AJAX 调用的参数 - 它实际上不是对象的名称。

您在评论中询问了 JSON。现在,您的所有数据都经过 URL 编码发送。要发送JSON,一种方法是:

var submitPackage = {
    f: JSON.stringify($('input[name="textfield"]').val()),
    c: JSON.stringify($('#coordinates').html()),
    a: JSON.stringify($('#address').html())
};

$.ajax({
    url: "file.php",
    type: "GET", //Is there a reason you care about doing GET versus POST (the default)?
    data: submitPackage
});

那么您的 PHP 将是:

if(isset($_GET['f']) && isset($_GET['c']) && isset($_GET['a'])) {
    echo json_decode($_GET['f']) . ' - ' . json_decode($_GET['c']) . ' - ' . json_decode($_GET['a']);
}