从 $.ajax 调用中检索参数的问题

Posted

技术标签:

【中文标题】从 $.ajax 调用中检索参数的问题【英文标题】:Issue with retrieving a parameter from a $.ajax call 【发布时间】:2013-01-25 21:59:00 【问题描述】:

大家好,我有以下 $.ajax 调用:

$.ajax(
        type: "POST",
        dataType: "json",
        url: '/pcg/popups/getNotes.php',
        data:
        
            'nameNotes': notes_name.text(),

        ,
        success: function(response) 
            $('#notes_body').text(response.the_notes);
            alert(response.the_notes);

        
);

现在关注data:,假设我发送了“BillCosby”。这将被发送到指定的文件,我在该文件中有这个:

$username_notes = $_POST['nameNotes']; 

现在假设我只是让 $username_notes 像这样在 json 中返回...

$returnArray = array( 'the_notes' => $username_notes );

echo json_encode($returnArray);

这会起作用,响应将是 BillCosby。现在,当我尝试使用 PDO 从我的 mysql 数据库中获取 BillCosby 的值时,它将返回 null ....在显示整个文件的代码之前,我只想明确 PDO 有效完美,如果我要给变量 $username_notes 'BillCosby' 的直接值,我会完美地运行数据库,如果我有 $_POST['nameNotes']; 它只会返回 null;在前面。

getNotes.php:

$username_notes = $_POST['nameNotes'];

grabNotes($username_notes);



function grabNotes($xusername)
   
    .....

    $newUser = $xusername;

    try   
      # MySQL with PDO_MYSQL  
      $DBH = new PDO("mysql:host=$hostname;dbname=$database", $username, $password);  
      $DBH->setAttribute( PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION );

      
    catch(PDOException $e)  
        echo "I'm sorry, I'm afraid I can't do that.";  
        file_put_contents('PDOErrors.txt', $e->getMessage(), FILE_APPEND);   
    

    $sql = "SELECT notes FROM csvdata WHERE username = :username";
    $getmeminfo = $DBH->prepare($sql);
    $getmeminfo->execute(array(':username' => $newUser));
    $row = $getmeminfo->fetch(PDO::FETCH_ASSOC);
    $notes = $row['notes'];

    $returnArray = array( 'the_notes' => $row['notes'],);

    echo json_encode($returnArray);

    $DBH = null;


所以我的问题是,为什么我不能从 PDO 语句中获取返回值?如果我在 $.ajax 文件调用的文件中告诉 PDO 语句名称 - 'BillCosby',它将完美运行。但如果我通过 $_POST 从 $.ajax 获取值,它将不起作用并返回 null。有趣的是我可以返回与发送的相同的值。

感谢你们的时间!

【问题讨论】:

你使用$username 很奇怪。它甚至看起来像是在遮蔽另一个变量 检查更新我改了... 尝试修剪它 -> $username_notes = trim( $_POST['nameNotes'] ); Issue with running a PDO statement from a $.ajax call 的可能重复项 修剪效果如何? 【参考方案1】:

尝试修剪它:

$username_notes = trim( $_POST['nameNotes'] );

有时字符串中的空格会导致这种错误,而且很难发现。

【讨论】:

@DavidBiga - 当然,很乐意提供帮助?【参考方案2】:

我经常需要添加 ?callback=?。因此,您的 JQuery ajax 请求将如下所示:

$.ajax(
    type: "POST",
    dataType: "json",
    url: '/pcg/popups/getNotes.php?callback=?',
    data:
    
        'nameNotes': notes_name.text(),

    ,
    success: function(response) 
        $('#notes_body').text(response.the_notes);
        alert(response.the_notes);

    
);

另外,最好使用 jQuery.getJSON 方法。

【讨论】:

以上是关于从 $.ajax 调用中检索参数的问题的主要内容,如果未能解决你的问题,请参考以下文章

如何调用ajax从数据库中检索数据

jquery-无法从我通过ajax调用获得的对象类型响应中检索数据

在 codeigniter 中使用 AJAX 从视图调用控制器函数并从 db 检索行

从控制器检索数据并返回 ajax 调用失败

无法将 Ajax GET 调用中的数据值检索到 Django 视图中

使用 Jsonp 进行 $.ajax 调用后无法在 Jquery 中检索数据