#php #jquery #ajax #post
#php #jquery #ajax #Публикация
Вопрос:
У меня есть простая функция AJAX ниже, при нажатии кнопки #submit_message, которая находится на модальном, данные отправляются на страницу (insert_message.php ), где данные вводятся в базу данных и модальная перезагрузка. Я хочу отправить значение id, которое является recipient_id для модального. Первая часть функции работает, и модальная загрузка выполняется отлично, но данные post в модальную не публикуются — как ни в чем — в Firebug, в который отправляются данные insert_message.php , но по возвращении ничего. У меня есть очень похожие функции, которые выполняют другие функции, и они работают нормально. Я искал ответ, но я думаю, что это очень специфическая проблема, поэтому успеха нет. Это может быть даже проблема с синтаксисом — я новичок в jQuery.
$("#submit_message").click(function(){
var recipientId = $('#profile_id').val();
var subject = $('#message_subject').val();
$.ajax({
url: '../ajax/insert_message.php',
type: 'post',
data: {
'subject': $('#message_subject').val(),
'message': $('#message_field').val(),
'recipientId': recipientId,
},
success: function(html) {
$('.message_holder').load('message_modal.php', {id: recipientId});
$('input[type="text"],text').val('');
$('input[type="text"],textarea').val('');
}
});
return false;
});
Вот файл PHP….
if(isset($_POST['subject'])
amp;amp; !empty($_POST['subject'])
amp;amp; isset($_POST['message'])
amp;amp; !empty($_POST['message'])
amp;amp; isset($_POST['recipientId'])
amp;amp; !empty($_POST['recipientId'])){
$message = new Message();
$message->subject = ($_POST['subject']);
$message->message = ($_POST['message']);
$message->time = strftime("%Y-%m-%d %H:%M:%S", time());
$message->sender_id = $_SESSION['sender_id'];
$message->recipient_id = $_POST['recipientId'];
$message->status = "unread";
$message->create();
}
PHP-файл работает, и отправляемые ему данные попадают в database…so все идет нормально. Все еще тестирую другие области. У меня такое странное чувство, что это не имеет ничего общего с jQuery и больше связано с модальным …. отсутствие включения необходимого файла или чего-то в этом роде. Сейчас работаю над этим ….. (ps у меня есть операторы isset и !empty, потому что я нахожу случайные неожиданные варианты поведения с PHP в этом отношении …..)
Вот выходные данные — параметры отправляются и вставляются в базу данных…..
Parametersapplication/x-www-form-urlencoded
message Message
recipientId 162
subject Subject
Source
subject=Subject amp;message=Message amp;recipientId=162
Затем в журнале консоли говорится…..
(nothing to output) scripts_ajax.js (line 66)
Никаких сообщений об ошибках …… все еще работаю над этим …. спасибо за ваше внимание,
Немного запутался, разместив здесь полную форму, но это message_modal.php похоже на то. Я думаю, что на данном этапе проблема здесь…..
<div id="myModal" class="reveal-modal-mail">
<p>Message to <?php echo User::full_name($id);?><p>
<?php
if(isset($_POST['recipientId'])){
//DO STUFF
}
?>
<form action="" method="post">
<table>
<tr>
<td>
<input id="message_subject" name="subject" type="text"
placeholder="Message subject" size="20" maxlength="3000" value=""/>
</td>
</tr>
</table>
<table>
<tr>
<td>
<textarea id="message_field" name="message" type="text" placeholder="Message details"></textarea>
</td>
</tr>
</table>
<input id="submit_message" type="button" name="submit" value="submit" />
<input id="profile_id" type="hidden" name="submit" value="<?php echo $id;?>"/>
</form>
<a class="close-reveal-modal">amp;#215;</a>
Комментарии:
1. Я не вижу ничего плохого в этом коде. Посмотрите, выполняется ли этот код и достигает
$.ajax()
ли он вызова.2. Если insert_message.php ничего не возвращает, ваш первый шаг отладки — убедиться, что php работает правильно. Опубликуйте это вместо этого или, по крайней мере, подтвердите, что это работает.
3. Несколько предложений. 1) Поместите
console.log()
оператор или точку останова в свойsuccess
обработчик, чтобы узнать, вызывается ли он. 2) Если он не вызывается, затем определитеerror
обработчик для вызова ajax и запишите его аргументы, чтобы узнать, почему он возвращает ошибку, и 3) Посмотрите на вкладку сеть отладчика Chrome, чтобы точно увидеть, что возвращается с вашего сервера вашему клиенту. 4) Проверьте консоль отладки, чтобы узнать, не сообщается ли о каких-либо ошибках.4. попробуйте этот способ для отладки вызовов ajax success:funcition(response,textStatus,jqXHR){console.log(response);},error:function(jqXHR,textStatus,errorThrown){console.log(textStatus) ; }
5. Как насчет message_modal.php файл — на что это похоже? Кроме того, селекторы $(‘input[type=»text»],text’).val(«) и $(‘input [type=»text»],textarea’).val(«), вероятно, срабатывают раньше вашего . команда загрузки завершается. Используйте полную функцию с вашим .load. См . api.jquery.com/load за подробностями.
Ответ №1:
Я нашел ответ, и в нем нет ничего неожиданного или неприятного.
Класс ‘message_holder’, на который ссылается функция ajax, был неправильно указан на странице HTML.
Ошибка с задержкой.
Извиняюсь за трату времени людей