我是jquery和AJAX的新手,在努力了5-6个小时并搜索解决方案后,我正在寻求帮助。
<script type="text/javascript" src="https://ajax.googleapis.com/ajax/libs/jquery/1.5.0jquery.min.js"></script>
<script type="text/javascript">
$(function() {
$(".submit").live('click',(function() {
var data = $("this").serialize();
var arr = $("input[name='productinfo[]']:checked").map(function() {
return this.value;
}).get();
if(arr=='')
{
$('.success').hide();
$('.error').show();
}
else
{
$.ajax({
data: $.post('install_product.php', {productvars: arr}),
type: "POST",
success: function(){
$(".productinfo").attr('checked', false);
$('.success').show();
$('.error').hide();
}
});
}
return false;
}));
});
</script>
和HTML + PHP代码是,
$json = file_get_contents(feed address);
$products = json_decode($json);
foreach(products as product){
// define various $productvars as a string
<input type="checkbox" class="productvars" name="productinfo[]" value="<?php echo $productvars; ?>" />
}
<input type="submit" class="submit" value="Install Product" />
<span class="error" style="display:none"><font color="red">No product selected.</font></span>
<span class="success" style="display:none"><font color="green">product successfully added to database.</font></span>
当我从feed中提取产品信息时,我不想刷新页面,这就是我使用AJAX post方法的原因。使用上面的代码“install_product.php”页面正确处理字符串并正确地完成其工作。
我面临的问题是,当我第一次检查复选框并安装产品时,它工作得很好,但是在第一次发布后“有时它工作,有时它不起作用”。当新的列表从Feed中提取后,每个第一篇文章都是完美的,之后我需要再次单击“安装”按钮来执行此操作。
我在不同浏览器上测试了代码,但问题相同。可能是什么问题? (我正在测试活动主机上的代码而不是localhost)
答案 0 :(得分:1)
$.live
已弃用,请考虑改为使用$.on()
。
执行一次后哪个函数没有执行? $.live
?
此外,它应该是:
var data = $(this).serialize();
不
var data = $("this").serialize();
在您的示例中,您正在寻找一个名为“this”的显式标记,而不是范围。
<强>更新强>
$(function () {
$(".submit")
.live('click', function(event) {
var data = $(this).serialize();
var arr = $("input[name='productinfo[]']:checked")
.map(function () {
return this.value;
})
.get();
if (arr == '') {
$('.success')
.hide();
$('.error')
.show();
} else {
$.ajax({
data: $.post('install_product.php', {
productvars: arr
}),
type: "POST",
success: function () {
$(".productinfo")
.attr('checked', false);
$('.success')
.show();
$('.error')
.hide();
}
});
}
event.preventDefault();
});
});
答案 1 :(得分:0)
是否可能,它错过了arr的值并显示错误,或者是它正在拨打电话但没有返回,或者它根本没有接通电话? 做一个console.log来处理debuging并检查firefox / chrome中的内容,看看问题是什么以及在哪里。