我已经为此苦苦挣扎了一段时间。我知道有多个关于这个的帖子,但由于我是这个主题的新手,所以我很难理解。我想将我的复选框表单的值发布到 php 脚本,并将值的值返回给我页面上的div。这是代码:
带有 ajax 调用的点击函数:
<script>
function submit_form(){
var data = { 'saqalinproxy[]' : []};
$("input:checked").each(function() {
var chck1 = $(this).val();
alert(chck1);
data['saqalinproxy[]'].push($(this).val());
});
$.ajax({
type : 'POST',
url : 'testdeploy.php',
data : data,
dataType: "html",
success : function(data){
$('#progress_status').hide();
$('.return').html(data); // replace the contents coming from php file
}
});
$('#progress_status').show();
}
</script>
网页形式 :
<div style="width: 700px; height: 150px; padding: 10px">
<form id="caForm" class="caForm" method="post" name="caForm">
<fieldset id="fs-0">
<legend>QA Proxy Servers</legend>
<input type="checkbox" id="saqalin-proxy01" name="saqalinproxy[]" value="41.191.126.246">saqalin-proxy01<br>
<input type="checkbox" id="saqalin-proxy02" name="saqalinproxy[]" value="41.191.126.247">saqalin-proxy02<br><br>
<!--<input type="checkbox" id="ca-0"> Check/Uncheck All -->
<br>
<input type="submit" value="Deploy" onclick="submit_form();"/>
</fieldset>
</form>
</div>
<div id="status">
<p style="display:none;" id="progress_status"><img id="progress_image_status" style="padding-left:5px;padding-top:5px;" src="images/ajax-loader.gif" alt=""> Checking if this kak works!</p>
</div>
<div id="return"></div>
PHP 帖子页面 :
<?
if(isset($_POST['saqalinproxy[]'])){
$invite = $_POST['saqalinproxy[]'];
print_r($invite);
}
?>
我正在努力在我的页面上返回值。任何帮助,不胜感激。
js 和 PHP 中的一些变化。在 html 中
<input type="submit" value="Deploy" onclick="return submit_form();"/>
在 js 中submit_form函数中返回 false。而在 php 中
if(isset($_POST['saqalinproxy'])){
$invite = $_POST['saqalinproxy'];
print_r($invite);
}
也改变$('.return').html(data); to $('#return').html(data);
在此行中,您正在选择具有类return
的元素,因为.
表示类名:
$('.return').html(data);
在你的 HTML 中,你的div
有一个id
return
而不是一个类(注意#
)。因此,请将其更改为:
$('#return').html(data);
您的第二个问题在 PHP 代码中,您正在尝试使用 $_POST['saqalinproxy[]']
来定位发布的数组。PHP 将其直接解析为 PHP 数组$_POST['saqalinproxy']
因此实际上是数组。
if(isset($_POST['saqalinproxy'])){
$invite = $_POST['saqalinproxy'];
例如,如果同时选中了这两个项目,则:
echo $_POST['saqalinproxy'][0]; // outputs 41.191.126.246
echo $_POST['saqalinproxy'][1]; // outputs 41.191.126.247
此外,您可以简单地序列化表单,而不是像您一样尝试构建发布数据:
$.ajax({
type : 'POST',
url : 'testdeploy.php',
data : $('#caForm').serialize(),
修复这些问题后,您将看到表单正在提交两次。第一次作为 ajax,第二次作为传统请求。要解决此问题,您需要在单击中返回 false 或从函数中返回 false。
<input type="submit" value="Deploy" onclick="submit_form(); return false;"/>
您可以使用一个自动为您制作的库,即 phery http://phery-php-ajax.net,在您的情况下,它会是这样的(注意表单上的data-remote="deploy"
)
<div style="width: 700px; height: 150px; padding: 10px">
<form id="caForm" class="caForm" data-remote="deploy" action="testdeploy.php" name="caForm">
<fieldset id="fs-0">
<legend>QA Proxy Servers</legend>
<input type="checkbox" id="saqalin-proxy01" name="saqalinproxy[]" value="41.191.126.246">saqalin-proxy01<br>
<input type="checkbox" id="saqalin-proxy02" name="saqalinproxy[]" value="41.191.126.247">saqalin-proxy02<br><br>
<!--<input type="checkbox" id="ca-0"> Check/Uncheck All -->
<br>
<input type="submit" value="Deploy" />
</fieldset>
</form>
</div>
<div id="status">
<p style="display:none;" id="progress_status"><img id="progress_image_status" style="padding-left:5px;padding-top:5px;" src="images/ajax-loader.gif" alt=""> Checking if this kak works!</p>
</div>
<div id="return"></div>
然后在您的testdeploy.php
中将其更改为:
function deploy($data){
$r = new PheryResponse;
foreach ($data['saqalinproxy'] as $proxy){
// do whatever you need to do with $proxy here
}
$r->jquery('#return')->html('set the HTML of your return');
$r->jquery('#progress_status')->hide();
return $r;
}
Phery::instance()->set(array(
'deploy' => 'deploy'
))->process();
就是这样,不需要额外的Javascript代码,这一切都是自动的。但要显示进度,您需要执行以下操作:
$(function(){
// phery:before fires before sending the AJAX
$('#caForm').bind('phery:before', function(){
$('#progress_status').show();
});
});