Intereting Posts
Подсчет количества результатов, возвращаемых запросом базы данных в Codeigniter заменяя .php ext на .html через .htaccess Текстовое содержимое и FileUpload с AJAX Пользовательский шаблон таксономии по умолчанию не выбран Безопасность файлов cookie Как получить второе значение в раскрывающемся списке на основе выбранного в первом раскрывающемся списке Propel – объединение одной и той же таблицы несколько раз и группировка Документация Magento ORM Как избежать потери макросов в PHPExcel? Как добавить дочернюю вкладку onclick кнопки в Yii framework? Регулярное выражение PHP для извлечения ссылки / кода TwitPic, если присутствует Как проверить на массивность в PHP? Что такое PHP track_errors? Как обновить статус строки с помощью jQuery change () и отобразить в соответствующей таблице API-интерфейс Facebook Graph: публикация для автономного пользователя с помощью идентификатора пользователя Facebook и access_token

Не могу понять, почему PHP не получает данные POST из вызова $ .ajax

Это не похоже на то, что я не делал этого самого процесса раньше, но я не могу понять, почему данные POST моего PHP-скрипта пустые. Вот что я сделал / нашел:

  1. Я проверил, что параметр «data» параметра $ .ajax имеет значение (предупреждения в функции submitSearch и в параметре success отображают правильное значение переменной поиска).

  2. Я знаю, что скрипт «найден» – ни один файл не нашел сообщений в консоли js в браузере.

  3. Я не получаю никаких ошибок соединения db

  4. Я также знаю, что PHP-скрипт запущен, потому что предупреждение в параметре успеха $ .ajax-вызова отображает значение $ message в предложении else 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-скрипт (скрипты / 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); } 

Related of "Не могу понять, почему PHP не получает данные POST из вызова $ .ajax"

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

Я считаю, что вам нужно установить $_POST['search'] как указано выше.

может быть, вы должны изменить (в своем Javascript) строку:

 data: search, 

чтобы:

 data: {search: search}, 

Вы отправляете простую строку вместо именованного параметра.

Не используйте функцию щелчка напрямую. Вместо этого используйте функцию $ .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); }); 

Попробуйте это до вашего успеха

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