我正在尝试通过Ajax提交表单,但我无法提交。我有多个表单,我正在使用(this)提交数据。我收到错误From error:0 error
。警告消息显示我有值。
<script type="text/javascript">
$(document).ready(function() {
$(".submitform").click(function (){
alert ($(this).parent().serialize());
$.ajax({
type: "POST",
url: "reply_business.php",
timeout:5000,
data: $(this).parent().serialize(),
beforeSend: function(xhr){
$('#load').show();
},
success: function(response){
$(this).parent().find('.sentreply').append(response);
$('.sentreply div:last').fadeOut(10).fadeIn(2000);
//uncomment for debugging purposes
//alert(response);
},
error: function(jqXHR) {
alert ('From error:' + jqXHR.status + ' ' +jqXHR.statusText);
},
complete: function(jqXHR, textStatus){
//uncomment for debugging purposes
//alert ('From complete:' + jqXHR.status + ' ' +jqXHR.statusText + ' ' + textStatus);
$('#load').hide();
}
});
});
});
</script>
我正在通过PHP代码
创建下面的表单foreach ($array['business_ids'] as $business)
{
?>
<form >
<input type="hidden" name="b_id" value="<?php echo $business ; ?>" />
<input type="hidden" name="c_id" value="<?php echo $sqlr['conversation_id']; ?>" />
<input type="hidden" name="q_id" value="<?php echo $sqlr['query_id']; ?>" />
<input type="hidden" name="u_id" value="<?php echo $sqlr['u_id']; ?>" />
<textarea name="reply">Type the reply here.</textarea>
<input type="submit" class="submitform" value="Submit">
</form>
<?php
}
我不明白为什么Ajax无法发送数据。
答案 0 :(得分:1)
如果没有看到标记或网络流量,我们只能猜测。也许$(this).parent()不是形式?
由于这个原因,附加$(form).submit()
而不是$(button).click()
通常更安全,因为$(button).click()
无法通过按Enter键捕获表单提交。
修改以下是一个例子:
<form id="theform">
<input type="text" id="thetext" name="thetext" />
<input type="submit" value="send" />
</form>
<form id="anotherform">
<input type="text" id="anothertext" name="anothertext" />
<input type="submit" value="save 2" />
</form>
<script>
$(document).ready(function () {
$("#theform").submit(function (e) {
var data = {
thetext: $("#thetext").val()
};
$.ajax("/the/server/url", {
type: "POST",
contentType: "application/json; charset=utf-8",
data: JSON.stringify(data),
success: function (r) {
alert("done");
}
});
// Technically you need only one or the other
e.preventDefault();
return false;
});
});
</script>
答案 1 :(得分:0)
您似乎在启动Ajax请求后提交了表单 - 并且在卸载页面时,请求被取消。由于您的表单没有action
,因此提交只会重新加载当前页面,因此您可能不会注意到它。
为防止这种情况发生,您需要preventDefault()
捕捉到的事件。此外,您不应仅处理提交按钮上的click
个事件,而应处理submit
- <form>
- 事件本身。