【问题标题】:Ajax won't send data to PHPAjax 不会向 PHP 发送数据
【发布时间】:2015-06-22 12:34:40
【问题描述】:

已解决:此处发布的代码是正确的,但是连接到数据库的一些 PHP 代码需要修复,我现在可以正常工作了。我在 cmets 中使用了 Quentin 的建议来解决我的问题。

我正在尝试通过 ajax 将数组的 JSON 发送到 PHP 文件,然后运行 ​​php 文件。这是我的 ajax:

    $('#submit').click(function() {
  $.ajax({
    method: "POST",
    url: "submit.php",
    data: {selectedImageArray: selectedImageArray}
  }).done(function( msg ) {
    alert( "Data Saved: " + selectedImageArray );

  });
});

在我的 PHP 文件中,我连接到一个数据库,然后有这个:

$array = $_POST['selectedImageArray'];
    $sql = $dbh->prepare("INSERT INTO pending_trades (steam_id, trade_items, is_giving, is_receiving, has_started) VALUES (:steamid, :itemlist, '1', '0', '0')");
    $sql->bindParam(':steamid', $steamprofile['steamid']);
    $sql->bindParam(':itemlist', $array);

    $sql->execute();

我希望它将“selectedImageArray”json 发送到 php 并在按下此按钮时使用它运行 msql 查询:

<button id="submit" class="button1" >Submit<span></span></button>

单击按钮时,我收到“数据已保存:array data”消息,但未运行 php 代码。为什么这不起作用?

编辑:我设置了data: {selectedImageArray: selectedImageArray} 而不是data: selectedImageArray,因为有人告诉我它会变成 JSON 格式,对吗?

【问题讨论】:

  • $steamprofile['steamid'] 来自哪里?删除include()
  • 我以前从未在 JavaScript 中见过include()...无论如何,这具体在哪里失败?当你调试 PHP 代码时,会发生什么?
  • @SulthanAllaudeen,他们为什么需要同步请求?这里不需要它,它会锁定 UI 直到它完成。
  • @SulthanAllaudeen,即使数据是图像数据(这需要 data 是 FormData 对象),使请求同步也不会影响它。
  • 如何判断 PHP 代码没有运行?这到底是什么意思?开发人员工具的“网络”选项卡是否不显示正在发出的请求?它是否超时而不是得到响应?它是否得到响应但显示 PHP 源代码? if 语句的错误分支会运行吗?

标签: javascript php jquery mysql ajax


【解决方案1】:

您正在数据库中添加一个数组而不是尝试使用的字符串:

$sql->bindParam(':itemlist', json_encode($array));

当你得到数据时运行:

$array = json_decode($itemlist);

【讨论】:

  • 这是一个可怕的问题解决方案。关系数据库很棒,因为它们可以处理关系。如果 问题(不清楚,因为 OP 仍未正确定义问题),那么解决方案是使用外键设置表,然后在循环中插入值.
  • 只有当 OP 需要使用查询来获取关系数据时,您的解决方案才会更好,如果他需要获取每个 id 的所有数据,这种方式会更快。
  • 这是一种虚假的经济。 6 个月后,非规范化数据不可避免地会成为一个问题。
  • @Quentin 所以你认为我不应该将数据编码成 JSON 吗?如果我这样做会节省一些空间。
  • @Macerier 你似乎是对的。使用$array 只添加单词“Array”,将其转换为Json 会保存实际的数组。
【解决方案2】:

首先看看你的浏览器调试器到底是什么东西发送到了php文件中。第二件事:您将向其发送 JSON。这意味着,你有一个这样的 POST 表单数组:

[{
   "key1": "value1",
   "key2": "value2"
}]

所以,总而言之,这是行不通的:

$array = $_POST['selectedImageArray'];

您需要访问 e。 G。直接$_POST['key1']

【讨论】:

  • "您将向其发送 JSON。" ——那不是真的。当给出问题中的语法时,jQuery 将生成表单编码数据并填充$_POST
【解决方案3】:

您可以添加内容类型 JSON。否则它将被视为文本。

var data = JSON.stringify({selectedImageArray: selectedImageArray});
 $.ajax({
method: "POST",
dataType: 'json', // If your response is JSON
contentType: "application/json",
url: "submit.php",
data: data
}).done(function( msg ) {
alert( "Data Saved: " + selectedImageArray );
include ('submit.php');
});

【讨论】:

  • 设置dataType只会影响服务器响应的处理方式,不会影响php代码的运行方式
  • 我们看不到服务器的响应是什么,所以不知道是不是JSON。无论如何,客户端代码仅将其视为文本。
  • contentType: "application/json", 完全是错误的——data 的值不是 JSON,并且服务器端代码是从 $_POST 读取的,因此服务器不需要 JSON。
  • 我将 contentType 设置为 json
  • @AnilTalla — 这意味着你没有撒谎,但它仍然无法工作,因为$_POST['selectedImageArray'] 不会被填充,因为 PHP 不会以这种方式处理 JSON 格式的 HTTP 请求。由于服务器端代码使用$_POST,因此您仍在添加额外的错误而不是解决问题。
猜你喜欢
  • 2016-03-09
  • 2014-01-11
  • 1970-01-01
  • 1970-01-01
  • 2014-04-01
  • 1970-01-01
  • 2017-02-24
  • 1970-01-01
相关资源
最近更新 更多