【问题标题】:Posting data from ajax to a php script将数据从 ajax 发布到 php 脚本
【发布时间】:2017-04-27 00:53:21
【问题描述】:

问题

我有一个 onclick Jquery 函数,它将返回被点击表格行的第一个单元格中的值。然后,我尝试使用 ajax type: 'POST' 将此值传递给 php 脚本,然后该脚本将使用此值执行数据库查询以进行比较。出于某种原因,$_POST 始终为空。 ajax 没有返回任何错误,但我无法在服务器端接收数组的值。任何帮助表示赞赏。

jQuery

​​>
$('tr.profileTableClick').click(function() {
var tableData = $(this).find('td:nth-child(1)').map(function() {
    return $(this).text();
}).get();

$.ajax({
    url: 'selectAnswers.php',
    type: 'POST',
    data: {
        'id': tableData
    },
    dataType: 'text',
    error: function() {
        console.log('Error in ajax request');
    },
    success: function(data) {
        console.log('Success of ajax request');
        console.log(data);
    }
});

PHP

这是selectAnswers.php 文件:

<?php

$id = $_POST['id'][0];

try {
    $conn = new PDO(
        "mysql:host=$servername;dbname=$dbname",
        $username,
        $password
    );

    $conn->setAttribute(
        PDO::ATTR_ERRMODE,
        PDO::ERRMODE_EXCEPTION
    );

    $stmt = $conn->prepare(
        "SELECT
            quality_of_service,
            self_improvement,
            personal_behavior,
            organization_rules_commitment,
            team_work,
            appearance, work_with_high_responsibility,
            loyalty_to_organization,
            punctuality_on_work,
            office_maintaining, areas_of_improvement,
            points_of_weakness,
            points_of_strength
        FROM appraisals_table
        WHERE Apr_Id = :id"
    );

    $stmt->bindValue(
        ':id',
        $id,
        PDO::PARAM_INT
    );

    $stmt->execute();

    while ($row = $stmt->fetch(PDO::FETCH_ASSOC)) {
        $ans1 = $row['quality_of_service'];
        $ans2 = $row['self_improvement'];
        $ans3 = $row['personal_behavior'];
        $ans4 = $row['organization_rules_commitment'];
        $ans5 = $row['team_work'];
        $ans6 = $row['appearance'];
        $ans7 = $row['work_with_high_responsibility'];
        $ans8 = $row['loyalty_to_organization'];
        $ans9 = $row['punctuality_on_work'];
        $ans10 = $row['office_maintaining'];
        $ans11 = $row['areas_of_improvement'];
        $ans12 = $row['points_of_weakness'];
        $ans13 = $row['points_of_strength'];
    }
} catch(PDOException $e) {
    echo 'Error: '. $e->getMessage();
}

$conn = null;

【问题讨论】:

  • tableData 的结果是什么?
  • 根据控制台,结果将是一个字符串。例如“48”,如果我点击第一行。
  • xhr表头长什么样,能发截图吗?
  • 这是我在控制台上得到的 Array ( [id] => Array ( [0] => 48 ) )
    注意:数组到字符串的转换C:\xampp\htdocs\appraisals\selectAnswers.php 在第 20 行
  • 是的,您的 ajax 响应中的结果向我们展示了网络响应

标签: php jquery ajax


【解决方案1】:

更改任一 js:

var tableData = $(this).find("td:nth-child(1)").text();

或php:

$id = (int)$_POST['id'][0]

【讨论】:

  • 仍然出现同样的错误注意:未定义的索引:第 7 行 C:\xampp\htdocs\appraisals\selectAnswers.php 中的 id
  • 如果您 print_r($_POST['id']); 得到值,这不是一个错误通知?
  • 不,同样的通知:/
  • 你确定你总是发送一个有效的 id 吗?
  • 如果 id 是指第一个单元格中的值,那么是的。检查我刚刚添加的屏幕截图。
【解决方案2】:

像这样使用新的 javascript 的 FormData API。 . .

var formdata = new FormData();
formdata.append('id', tableData);

$.ajax({
    url: 'selectAnswers.php', 
    type: 'POST', 
    data: formdata, 
    dataType: 'text', 
    error: function(){ 
        console.log("Error in ajax request"); 
    }, 
    success: function(data) { 
        console.log("Success of ajax request"); 
        console.log(data); 
    } 
}); 

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-11-26
    • 1970-01-01
    • 2017-07-15
    • 2014-01-02
    • 2017-04-23
    • 1970-01-01
    相关资源
    最近更新 更多