Ответ 1
var myCheckboxes = new Array();
$("input:checked").each(function() {
data['myCheckboxes[]'].push($(this).val());
});
Вы помещаете флажки в неправильный массив data['myCheckboxes[]']
вместо myCheckboxes.push
Я хочу отправить форму POST, содержащую поле textarea и поле ввода (type = "checkbox" с произвольным/переменным числом флажков) на моем сайте через jQuery.ajax(). PHP получает данные textarea, и ответ ajax корректно отображается пользователю. Однако, похоже, что PHP не получает данные флажка (был ли он проверен или нет). Как я могу заставить это работать? Вот код, который у меня есть:
HTML:
<form method="post" action="myurl.php" id=myForm>
<textarea id="myField" type="text" name="myField"></textarea>
<input type="checkbox" name="myCheckboxes[]" id="myCheckboxes" value="someValue1" />
<input type="checkbox" name="myCheckboxes[]" id="myCheckboxes" value="someValue2" />
...(maybe some more checkboxes - dynamically generated as necessary)
<input id="submit" type="submit" name="submit" value="Submit" onclick="submitForm()" />
</form>
jQuery:
function submitForm() {
$(document).ready(function() {
$("form#myForm").submit(function() {
var myCheckboxes = new Array();
$("input:checked").each(function() {
myCheckboxes.push($(this).val());
});
$.ajax({
type: "POST",
url: "myurl.php",
dataType: 'html',
data: { myField:$("textarea[name=myField]").val(),
myCheckboxes:myCheckboxes },
success: function(data){
$('#myResponse').html(data)
}
});
return false;
});
});
Теперь PHP
$myField = htmlspecialchars( $_POST['myField'] ) );
if( isset( $_POST['myCheckboxes'] ) )
{
for ( $i=0; $i < count( $_POST['myCheckboxes'] ); $i++ )
{
// do some stuff, save to database, etc.
}
}
// create the response
$response = 'an HTML response';
$response = stripslashes($response);
echo($response);
Все отлично работает: при отправке формы новая запись хранится в моей базе данных, ответ возвращается на веб-страницу, но данные флажка не отправляются. Я хочу знать, какие флажки были проверены. Я читал о .serialize(), JSON и т.д., Но ни один из них не сработал. Нужно ли сериализовать /JSON в jQuery и PHP? Как? Является ли один метод лучше другого при отправке данных формы с помощью флажков? Я застрял на этом в течение 2 дней. Любая помощь будет принята с благодарностью. Спасибо заранее!
var myCheckboxes = new Array();
$("input:checked").each(function() {
data['myCheckboxes[]'].push($(this).val());
});
Вы помещаете флажки в неправильный массив data['myCheckboxes[]']
вместо myCheckboxes.push
Да, это довольно хорошо работает с jquery.serialize()
HTML
<form id="myform" class="myform" method="post" name="myform">
<textarea id="myField" type="text" name="myField"></textarea>
<input type="checkbox" name="myCheckboxes[]" id="myCheckboxes" value="someValue1" />
<input type="checkbox" name="myCheckboxes[]" id="myCheckboxes" value="someValue2" />
<input id="submit" type="submit" name="submit" value="Submit" onclick="return submitForm()" />
</form>
<div id="myResponse"></div>
JQuery
function submitForm() {
var form = document.myform;
var dataString = $(form).serialize();
$.ajax({
type:'POST',
url:'myurl.php',
data: dataString,
success: function(data){
$('#myResponse').html(data);
}
});
return false;
}
СЕЙЧАС PHP, я экспортирую данные POST
echo var_export($_POST);
Вы можете увидеть, что все значение флажка отправлено. Надеюсь, это поможет вам
Проверьте это.
<script type="text/javascript">
function submitForm() {
$(document).ready(function() {
$("form#myForm").submit(function() {
var myCheckboxes = new Array();
$("input:checked").each(function() {
myCheckboxes.push($(this).val());
});
$.ajax({
type: "POST",
url: "myurl.php",
dataType: 'html',
data: 'myField='+$("textarea[name=myField]").val()+'&myCheckboxes='+myCheckboxes,
success: function(data){
$('#myResponse').html(data)
}
});
return false;
});
});
}
</script>
И на myurl.php вы можете использовать print_r($_POST['myCheckboxes']);
$.post("test.php", { 'choices[]': ["Jon", "Susan"] });
Итак, я просто перебираю флажки и строю массив. Что-то вроде.
var data = { 'user_ids[]' : []};
$(":checked").each(function() {
data['user_ids[]'].push($(this).val());
});
$.post("ajax.php", data);
Код, который у вас на данный момент, кажется, все в порядке. Проверьте, что содержит массив checkboxes. Добавьте этот код в начало вашего php script и посмотрите, передаются ли флажки в ваш script.
echo '<pre>'.print_r($_POST['myCheckboxes'], true).'</pre>';
exit;
Вы также можете попробовать это,
var arr = $('input[name="myCheckboxes[]"]').map(function(){
return $(this).val();
}).get();
console.log(arr);