我注意到以下代码无效。当我在它结束时删除, "json");
时,它可以工作,但我只是失败了。我按照它在网站上的jquery规范。知道为什么$.post
方法无法工作/进入?
我知道它不会输入$ .post的原因是因为alert(form.serialize());
没有被调用。
在我的PHP中,我发布时会返回以下内容:
$arr = array('status' => 'SUCCESS');
echo json_encode($arr);
exit();
这是我的下面的ajax:
var form = $('#lines');
$.post('', form.serialize(), function(json) {
alert(form.serialize());
if(json.status === 'SUCCESS') {
alert(json);
console.log('success');
} else {
alert(json);
console.log('failure');
}
}, "json");
如果我最后删除了json部分,它只返回页面的整个html。
答案 0 :(得分:0)
您的回答可能不是json。如果你删除,"json"
,它可以工作,但发布返回字符串数据,所以你的代码不能工作(字符串上的json.status将不起作用)。如果你放,"json"
,那么如果返回不正确,那么它就不会起作用。
你可以做什么:最后留下“json”,因为这就是你想要的,只需在成功函数开始时添加console.data(json) ;
和console.data(typeof json) ;
。
忘掉警报,首先停止你的脚本,它不如控制台那么精确。尽可能使用控制台。
我建议你这样写它以使其更具可读性:
console.log('form.serialize()',form.serialize()) ;
var post = $.ajax({
method : 'POST',
url : '',
data : form.serialize(),
dataType : "json"
});
post.done(function(json){
console.log('success',json) ;
console.log('typeof json',typeof json) ;
if(json.status === 'SUCCESS') {
console.log('success');
} else {
console.log('failure');
}
}) ;
post.fail(function(data){
console.log('fail',data) ;
alert('post fail') ;
}) ;
这是我完整的php文件index.php
。结构应该看起来像你的。请注意我确定的顶部部分比我发布数据时,我只回显json并返回,所以没有其他任何内容(如退出)。
<?php
if ( isset($_POST['name']) )
{
echo json_encode(array('status' => 'SUCCESS')) ;
return false ;
}
?>
<form>
<input type="text" name="name" />
<input type="button" />
</form>
<script
src="https://code.jquery.com/jquery-3.2.1.min.js"
integrity="sha256-hwg4gsxgFZhOsEEamdOYGBf13FyQuiTwlAQgxVSNgt4="
crossorigin="anonymous"></script>
<script>
jQuery('input[type="button"]').on('click',function(){
var form = jQuery(this).closest('form') ;
console.log('form.serialize()',form.serialize()) ;
var post = $.ajax({
method : 'POST',
url : '',
data : form.serialize(),
dataType : "json"
});
post.done(function(json){
console.log('success',json) ;
console.log('typeof json',typeof json) ;
if(json.status === 'SUCCESS') {
console.log('success');
} else {
console.log('failure');
}
}) ;
post.fail(function(data){
console.log(this) ;
console.log('fail',data) ;
alert('post fail') ;
}) ;
}) ;
</script>
答案 1 :(得分:0)
你需要在php代码中指定标题,并告诉jQuery一个&#34; json&#34;响应即将来临..这是正确的PHP代码
header('Content-Type: application/json');
$arr = array('status' => 'SUCCESS');
echo json_encode($arr);
exit();
注意发送json标题的行,现在就试试吧,它会工作