jQuery $ .ajax适用于$ .post不适用
我只是想做一个简单的$ .post调用。
<body>
<div id="main">
<div id="diver">
</div>
<form id="entry_field_container" action="" method="post" accept-charset="utf-8">
<input type="text" name="entry_field" value="" id="entry_field">
<input id="send" type="submit" value="send">
</form>
</div>
<script src="//ajax.googleapis.com/ajax/libs/jquery/1.7.1/jquery.min.js"></script>
<script>
$(document).ready(function(){
$('#send').click(function(e){
e.preventDefault();
var txt = $('#entry_field').val();
$.post(
'http://localhost/proc.php',
{
name:'me',
text:txt
},
function(data){
console.log(data);
$('#diver').html(data)
},
'json'
)
})
});
</script>
内proc.php:
<?php
$name = $_POST['name'];
$text = $_POST['text'];
echo "{\"" . $name . "\", \"" . $text . "\"}";
?>
出于某种原因,POST返回200,但控制台永不再来与data
,它只是一片空白。
最难理解的是为什么这个$ .ajax函数每次都有效。这不仅仅是同一事物的更详细的例子吗?
$.ajax({
'type': 'POST',
'url': 'http://localhost/proc.php',
'async': true,
'cache': false,
'global': false,
'data': {
'name':'me',
'text':txt
},
'error': function(xhr,status,err){
alert("DEBUG: status"+status+" \nError:"+err);
},
'success': function(data){
console.log(data);
}
});
在你$.post
你告诉jQuery的返回的文本是JSON,但在你的$.ajax
你不是。
$.post
失败,因为从PHP返回的文本不是有效的JSON。
{"me", "test"}
这是无效的JSON。 {}
是一个对象,因此它需要按键:
{"name": "me", "text": "test"}
或者,也许你想要一个阵列([]
):
["me", "test"]
附:在PHP中创建JSON时,它的高度为建议您使用json_encode
而不是自己制作JSON。
要添加到此,您可以通过http://jslint.com/运行您的输出,它会告诉您到底输出有什么问题。 – scrappedcola 2012-08-09 20:58:45
@scrappedcola:你是不是指http://jsonlint.com/? – 2012-08-09 21:00:50
jslint.com也适用 – scrappedcola 2012-08-09 21:01:42
您在$ .post调用中指定了一个“json”格式,但不是在$ .ajax调用中,可能是因为您没有返回有效的JSON响应,这就是为什么您的$ .post是不执行它的成功方法?
您的数据是否会进入服务器?查看AJAX视图(例如Chrome或Safari内置的或Firefox + Firebug内置的视图)。同时确保你没有任何JS错误或警告。 – halfer 2012-08-09 20:58:12
我这么认为,是的。在Inspector中,我可以查看'proc.php' - >'Preview',并且看到'{“me”,“文本”}',所以它看起来像proc.php正在读取POST变量。 – nipponese 2012-08-09 21:07:52