【问题标题】:Can't figure out why PHP not receiving POST data from $.ajax call无法弄清楚为什么 PHP 不接收来自 $.ajax 调用的 POST 数据
【发布时间】:2013-01-22 13:23:20
【问题描述】:

这不是我以前没有做过同样的过程,但我不知道为什么我的 PHP 脚本的 POST 数据是空的。这是我所做/发现的:

  1. 我已验证 $.ajax 调用的“data”参数有一个值(submitSearch 函数和成功参数中的警报显示搜索变量的正确值)。

    李>
  2. 我知道正在“找到”脚本 - 在浏览器的 js 控制台中没有文件未找到消息。

  3. 我没有收到任何数据库连接错误

  4. 我还知道 PHP 脚本正在运行,因为 $.ajax 调用的成功参数中的警报正在 PHP 脚本的 else 子句中显示 $message 值。

  5. 我在 PHP 脚本中设置的日志没有显示任何 POST 数据

如果有人可以看看这个并希望指出我所缺少的,我将不胜感激。

以下是所有相关代码:


Javascript(在 HTML 文件中的脚本标签中)


$('input#btnSubmitSearch').click(function() {
// Clear the text box in case an error was indicated previously
$('input#txtSearch').css({'background-color' : ''});

var search = $('input#txtSearch').val();

if (search == '' || search.length != 5) {
    alert ('Not a valid entry!');
    $('input#txtSearch').css({'background-color' : '#FDC3C3'});
    return false;
}
else {
    submitSearch(search);
    return false;
}
});

function submitSearch(search) {
alert ('Sending ' + search + ' to the database.');

$.ajax({
    type: 'POST',
    url: 'scripts/search.php',
    data: search,
    cache: false,
    success: function(response) {
        alert ('search is: ' + search + ', Response from PHP script: ' + response);
    },
    error: function(xhr) {
        var response = xhr.responseText;
        console.log(response);
        var statusMessage = xhr.status + ' ' + xhr.statusText;
        var message  = 'Query failed, php script returned this status: ';
        var message = message + statusMessage + ' response: ' + response;
        alert(message);
    }
});
}

PHP 脚本 (scripts/search.php)


<?php
require_once ('logging.php');
$log = new Logging();

$dbc = @mysqli_connect([connection stuff])
    OR die ('Could not connect to MySQL server: ' . mysqli_connect_error() );

$log->lwrite('$_POST[\'search\']: ' . $_POST['search']);

if (isset($_POST['search'])) {

    $search = $_POST['search'];

    $log->lwrite('$search: ' . $search);

    $querySearch= "SELECT id, value
                            FROM table
                            WHERE value LIKE '%" . $search . "%'";

    $log->lwrite('$querySearch: ' . $querySearch);

    $resultSearch = @mysqli_query($dbc, $querySearch);

    $numRowsSearch = mysqli_num_rows($resultSearch);

    $log->lwrite('rows returned: ' . $numRowsSearch);

    if ($numRowsSearch > 0) {
        while ($rowSearch = mysqli_fetch_array($resultSearch, MYSQLI_ASSOC)) {
            echo 'Value found: ' . $rowSearch['value'];
        }
    } 
}
else {
    $errorMessage ='$_POST[\'search\'] doesn\'t have a value!'; 
    $log->lwrite($errorMessage);
    echo ($errorMessage);
}

【问题讨论】:

  • 您没有记录 mysql 连接错误。还有var_dump($_POST) 给了什么?您应该分享实际传输的数据。还要检查你浏览器的开发工具,你应该已经可以在浏览器中看到了
  • 您提交的search 变量没有键,只有数据。您可以准确地检查您使用 firebug 或您选择的浏览器的类似工具发送的内容。
  • 最后有没有试过var_dump($_REQUEST)?它应该显示脚本是否接收到任何数据。

标签: php jquery post


【解决方案1】:
$.ajax({
    type: 'POST',
    url: 'scripts/search.php',
    data: {'search': search}, 
...

我相信你需要像上面那样设置$_POST['search']

【讨论】:

  • user1995997,Maerlyn 和 tiagox 的回答也正确。谢谢大家。像往常一样,我的疏忽,我只需要有人指出我错过了什么。令人惊讶的是,您在尝试解决问题时迷失了方向,最终错过了应该显而易见的事情!
【解决方案2】:

也许你应该改变(在你的 Javascript 中)这一行:

data: search,

到:

data: {search: search},

你发送的是一个简单的字符串而不是一个命名参数。

【讨论】:

    【解决方案3】:

    不要直接使用点击功能。改用 $.on 函数。

    $('form').on('click', ".submit", function() {
         //code here...
    });
    

    为了发出ajax请求,试试,

    var search = 'something';
    $.post("scripts/search.php", {search:search}, function(response) {
         alert ('search is: ' + search + ', Response from PHP script: ' + response);
    });
    

    【讨论】:

      【解决方案4】:

      在你成功之前试试这个

      beforeSend: function(xhr){xhr.setRequestHeader("Content-type", "application/x-www-form-urlencoded")}
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-11-04
        • 1970-01-01
        相关资源
        最近更新 更多