0

これまで同じプロセスを実行したことがないわけではありませんが、PHPスクリプトのPOSTデータが空である理由を理解できません。これが私がした/見つけたものです:

  1. $ .ajax呼び出しの「data」パラメーターに値があることを確認しました(submitSearch関数とsuccessパラメーターのアラートは検索変数の正しい値を示します)。

  2. スクリプトが「見つかった」ことはわかっています。ブラウザのjsコンソールにファイルが見つかりませんというメッセージはありません。

  3. データベース接続エラーが発生しません

  4. また、$。ajax呼び出しのsuccessパラメーターのアラートがPHPスクリプトのelse句の$ message値を表示しているため、PHPスクリプトが実行されていることもわかっています。

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

4 に答える 4

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

上記のように設定する必要があると思います$_POST['search']

于 2013-01-22T13:30:59.997 に答える
1

次の行を (Javascript で) 変更する必要があるかもしれません。

data: search,

に:

data: {search: search},

名前付きパラメーターの代わりに単純な文字列を送信しています。

于 2013-01-22T13:29:35.150 に答える
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);
});
于 2013-01-22T13:30:48.467 に答える