У меня есть функция php:
<?php
function send_message($userid, $projectid, $message) {
//some code
}
$userid = '1';
$projectid = '2';
$message = 'hello';
?>
<form id = "myform" method = "post" action = "">
<textarea name = "message" id = "project-message"></textarea>
<input type = "submit" name = "send" value = "send message">
</form>
Я хочу, чтобы кнопка отправки выполняла jQuery Ajax, чтобы моя страница не обновлялась:
js:
$('#myform').on('submit',function(e) {
e.preventDefault();
$.ajax({
url: //my valid url,
type: 'post',
dataType : 'json',
data: {
action: 'send_message', //this is the PHP function
projectid: projectid //how do I write this?,
userid: userid //how do I write this?,
message: message//how do I write this?'
},
})
.done(function(data) { console.dir(data);; })
.fail(function(jqXHR) { alert('You are fail. ' + jqXHR); });
});
В моем error.log я получаю NULL для 3 параметров, потому что я не уверен, как получить к ним доступ с моего PHP. Как вы получаете доступ к переменным PHP из jQuery?
ЕСЛИ ваш jquery находится на той же странице, что и PHP, просто повторите их в правильном положении, иначе поместите их в скрытые входы






Поместите свои переменные PHP в скрытые входы, чтобы они автоматически отправлялись при отправке.
Например: <input type = "hidden" name = "userid" value = "1">
Сериализация данных формы: var formData = $(form).serialize();
При отправке прикрепите данные формы:
$.ajax({
url: admin_ajax.ajax_url,
type: 'POST',
data: formData
})
$_POST['userid']а как насчет моего действия: 'send_projectmessage'? Это моя функция PHP, которой нужны formData в качестве параметров. Как записать их вместе в данные: {}
var formData = $(form).serialize() + "&moredata = " + morevalue
Вы можете получить все значения формы и отправить ее. Также вы можете установить другие значения в форме как скрытые.
<form id = "myform" method = "post" action = "" id='form1'>
<textarea name = "projectMessage" id = "project-message"></textarea>
<input type = "submit" name = "send" value = "send message">
<?php print "<input type='hidden' value='$userid' > "; name='userid' ?>
<?php print "<input type='hidden' value='$projectid' > "; name='projectid' ?>
<?php print "<input type='hidden' value='$message' > "; name='message' ?>
</form>
$('#myform').on('submit',function(e) {
e.preventDefault();
$.ajax({
url: admin_ajax.ajax_url,
type: 'post',
dataType:'json',
data: $("#form1").serialize(),
})
.done(function(data) { console.dir(data);; })
.fail(function(jqXHR) { alert('You are fail. ' + jqXHR); });
});
Мне нравится этот подход, потому что я могу повторно использовать ajax несколько раз или даже создать общую функцию для отправки формы в фоновом режиме с помощью ajax. Также я могу заполнить форму, используя для каждого цикла в php, имея все значения в массиве (например, результат базы данных)
бывший.
<?php
foreach($values as $k=>$v}{
print "<input name='$key' value='$v'>\n";
}
?>
<form id = "insert_form">
<textarea name = "message" id = "project-message"></textarea>
<input type = "submit" name = "send" id = "send" value = "send message">
<input type = "hidden" name = "userid" id = "userid" value = "<?php echo $userid= '1'; ?>">
<input type = "hidden" name = "projectid" id = "projectid" value = "<?php echo $projectid='2'; ?>">
<input type = "hidden" name = "message" id = "message" value = "<?php echo $message=
'hello'; ?>">
</form>
var project-message=document.getElementById('project-message').value;
var send=document.getElementById('send').value;
var userid=document.getElementById('userid').value;
var projectid=document.getElementById('projectid').value;
var message=document.getElementById('message').value;
$.ajax({
url:"your_url.php",
type:"POST",
data:$('#insert_form').serialize(),
success:function(data)
{
}
})
Несколько слов, объясняющих ваше решение, а также некоторое форматирование кода, сотворили бы здесь чудеса!
Где у вас есть данные: { это должно быть примерно так: успех: функция (данные) {, и проверьте правильность вашего URL-адреса... и я не думаю, что это действие прямо здесь...