Ajax使用其他参数进行序列化,
Ajax serialize with other parameters,
我非常接近这项工作。我只是对一个变量(q3)有问题。
我一直在使用ajax、php和MySQL将一些数据导入数据库。除了问题3之外,一切都正常。所有提交的数据,但数据库中的问题3始终为空。。。
有人有什么想法吗?我是使用serialize()的新手,但将其记录在控制台中会显示一个包含所有复选框的字符串。
请注意,这只是代码的一个子集谢谢
HTML:
<div id="question3" class="question_block" style="display:block;">
<p class=""><b>3. If you don’t use the bus system, please let us know why (pick your top 3 reasons):</b></p>
<input type="checkbox" name="question3_answer[]" class="question3_answer" value="Buses do not go where I want to go" /> Buses do not go where I want to go
<input type="checkbox" name="question3_answer[]" class="question3_answer" value="Buses do not run when I need it" /> Buses do not run when I need it
<input type="checkbox" name="question3_answer[]" class="question3_answer" value="Buses are too crowded" /> Buses are too crowded
<input type="checkbox" name="question3_answer[]" class="question3_answer" value="Buses are too crowded" /> Buses are unreliable
<input type="checkbox" name="question3_answer[]" class="question3_answer" value="Transfers between bus routes are difficult" /> Transfers between bus routes are difficult
<input type="checkbox" name="question3_answer[]" class="question3_answer" value="Waiting times are too long" /> Waiting times are too long
<input type="checkbox" name="question3_answer[]" class="question3_answer" value="I don’t live near a bus route" /> I don’t live near a bus route
<input id="question3_other" type="checkbox" name="" class="question3_answer other" value="other" />Other:
<input type="text" id="question3_textanswer" name="question3_answer[]" class="question3_answer" placeholder="Your answer here" style="width:40%;display:none;">
<button id="toPlay" onclick="submit_1();">Submit and continue</button>
</div>
Ajax:
function submit_1() {
var q1 = document.getElementById("question1_answer").value;
var q2 = document.getElementById("question2_answer").value;
var q3 = $('.question3_answer:checked').serialize();
var q4 = document.getElementById("question4_answer").value;
var q5 = document.getElementById("question5_answer").value;
var dataString = 'question1_answer=' + q1 + '&question2_answer=' + q2 + '&question3_answer=' + q3 + '&question4_answer=' + q4 + '&question5_answer=' + q5;
$.ajax({
type: "POST",
url: "php/video_form_process.php",
data: dataString,
cache: false,
success: function(html) {
alert(html);
}
});
return false;
}
PHP
if (isset($_POST['question1_answer'])) {
// Gets data from URL parameters
$question1_answer = $_POST['question1_answer'];
$question2_answer = $_POST['question2_answer'];
$question3_answer = $_POST['question3_answer'];
$question4_answer = $_POST['question4_answer'];
$question5_answer = $_POST['question5_answer'];
$query= "INSERT INTO `responses` (`uid`, `time`, `q1`,`q2`,`q3`,`q4`,`q5`, `ipaddr`) VALUES ('', '$today','$question1_answer','$question2_answer','$question3_answer','$question4_answer','$question5_answer')";
if ($query_run = mysqli_query($server, $query)) {
echo 'success';
} else {
echo 'error';
}
}
使用Ajax:
function submit_1() {
var q1 = $(".question1_answer:checked").val();
var q2 = document.getElementById("question2_answer").value;
var q3 = [];
$(".question3_answer:checked").each(function() {
q3.push($(this).val());
});
var q4 = document.getElementById("question4_answer").value;
var q5 = document.getElementById("question5_answer").value;
var dataString = 'question1_answer=' + q1 + '&question2_answer=' + q2 + '&question3_answer=' + q3 + '&question4_answer=' + q4 + '&question5_answer=' + q5;
$.ajax({
type: "POST",
url: "php/video_form_process.php",
data: dataString,
cache: false,
success: function(html) {
alert(html);
}
});
return false;
}
工作PHP:
if (isset($_POST['question1_answer'])) {
// Gets data from URL parameters
$question1_answer = mysqli_real_escape_string($server, $_POST['question1_answer']);
$question2_answer = mysqli_real_escape_string($server, $_POST['question2_answer']);
$question3_answer = mysqli_real_escape_string($server, $_POST['question3_answer']);
$question4_answer = mysqli_real_escape_string($server, $_POST['question4_answer']);
$question5_answer = mysqli_real_escape_string($server, $_POST['question5_answer']);
$query= "INSERT INTO `responses`
(`time`, `q1`,`q2`,`q3`,`q4`,`q5`, `ipaddr`)
VALUES ('{$today}', '{$question1_answer}', '{$question2_answer}', '{$question3_answer}', '{$question4_answer}', '{$question5_answer}', '127.0.0.1')";
if ($query_run = mysqli_query($server, $query)) {
echo 'success';
} else {
echo 'error';
}
}
尝试这样的方法来发布值。
使用数组推送,您可以在s3变量中添加复选框值,请参阅下面的代码。
var s3=[];
$("input:checked").each(function() {
s3.push($(this).val());
});
一些建议。。。
JS
- 为
data
使用对象,而不是字符串 - 可以使用
map
从checkes元素创建一个id数组或其他东西 - 在ajax中添加
dataType
PHP
- 您的
$today
在哪里申报?你确定它在那里吗 - 从sql查询中删除空的
uid
- 转义值
- 转义sql查询
- 您在值中未设置IP地址
JS
function submit_1() {
$.ajax({
type: "POST",
url: "php/video_form_process.php",
dataType: "html",
data: {
question1_answer = $("#question1_answer").val(),
question2_answer = $("#question2_answer").val(),
question3_answer = $(".question3_answer:checked").map(function() {
return $(this).val();
}).get().join(","),
question4_answer = $("#question4_answer").val(),
question5_answer = $("#question5_answer").val()
},
cache: false,
success: function(html) {
alert(html);
}
});
return false;
}
PHP
if (isset($_POST['question1_answer'])) {
// Gets data from URL parameters
$question1_answer = mysqli_real_escape_string($server, $_POST['question1_answer']);
$question2_answer = mysqli_real_escape_string($server, $_POST['question2_answer']);
$question3_answer = mysqli_real_escape_string($server, $_POST['question3_answer']);
$question4_answer = mysqli_real_escape_string($server, $_POST['question4_answer']);
$question5_answer = mysqli_real_escape_string($server, $_POST['question5_answer']);
$query= "INSERT INTO `responses`
(`time`, `q1`, `q2`, `q3`, `q4`, `q5`, `ipaddr`)
VALUES ('{$today}', '{$question1_answer}', '{$question2_answer}', '{$question3_answer}', '{$question4_answer}', '{$question5_answer}', '127.0.0.1')";
if ($query_run = mysqli_query($server, $query)) {
echo 'success';
} else {
echo 'error';
}
}
不要计算要通过Ajax发送的数据,只需使用$(FORM_ID).serialize()
,其中FORM_ID
是选择表单的选择器。在ajax调用中,这一行data: dataString,
变为$(FORM_ID).serialize(),
您的代码应该是
function submit_1() {
var q1 = document.getElementById("question1_answer").value;
var q2 = document.getElementById("question2_answer").value;
var q4 = document.getElementById("question4_answer").value;
var q5 = document.getElementById("question5_answer").value;
var q3 = [];
$('input[type="checkbox"][name="question3_answer[]"]:checked').each(function(){
q3.push($(this).val());
})
var dataPost = {
question1_answer: q1,
question2_answer: q2,
question3_answer: q3,
question4_answer: q4,
question5_answer: q5
};
$.ajax({
type: "POST",
url: "php/video_form_process.php",
data: dataPost,
cache: false,
success: function(html) {
alert(html);
}
});
return false;
}
相关文章:
- Ajax发布表单序列化,发布引号'
- 序列化数据属性中对象的最可靠方法
- YUI3 IO实用程序是否可以根据给定的内容类型标头值自动序列化数据
- 为什么JSON.stringify没有序列化原型值
- 有没有一个Nodejs库可以序列化和反序列化命名组件的路径(比如URL路径名)
- 是否可以在javascript中反序列化java对象
- jQuery Ajax数组序列化错误
- 序列化的 Ajax 参数未显示在 PHP 中
- 在GET请求中重复参数的jquery AJAX序列化
- 如何将参数添加到序列化对象
- 为什么我的序列化 JSON 在到达 java 脚本函数参数后被取消序列化
- ASP.NET MVC:GET参数未正确反序列化
- 通过ajaxsetup发布带有附加参数的表单序列化数据
- 发送序列化数据和其他参数;不起作用
- asp.net mvc ajax后传统的参数序列化
- 如何使Rails过滤器从序列化参数中分离解析JSON字符串
- 在序列化之前计算参数
- jQuery:可以使用对象和序列化来传递参数
- 使用c#在json中序列化一个函数作为参数
- Ajax使用其他参数进行序列化,