无法弄清楚为什么PHP没有从$ .ajax调用接收POST数据

时间:2013-01-22 13:23:20

标签: php jquery post

这不像我以前没有做过同样的过程,但我无法弄清楚为什么我的PHP脚本的POST数据是空的。这是我做过/找到的:

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

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

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

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

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

  6. 如果有人能看一眼,并希望指出我所缺少的东西,我将不胜感激。

    以下是所有相关代码:


    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);
    }
    

4 个答案:

答案 0 :(得分:7)

$.ajax({
    type: 'POST',
    url: 'scripts/search.php',
    data: {'search': search}, 
...

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

答案 1 :(得分:1)

可能你应该改变(在你的Javascript中)这一行:

data: search,

为:

data: {search: search},

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

答案 2 :(得分:1)

请勿直接使用点击功能。请改用$ .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);
});

答案 3 :(得分:1)

在您成功之前试试

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