我正在尝试将变量发送到进行AJAX调用的同一页面。
只有在我分离PHP脚本(例如process.php
并相应地更改AJAX url
)时才会收到成功的结果。
index.php
<head>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.3/jquery.min.js"></script>
<script>
$(function() {
$('form').submit(function(e) {
e.preventDefault();
$.ajax({
type : 'POST',
url : 'index.php',
data : $(this).serialize(),
dataType : 'json',
encode : true
})
.done(function(data) {
$('#result').html(data);
})
});
});
</script>
</head>
<body>
<?php
$data = array();
if(isset($_POST['name'])) {
$data = 'You entered: ' . $_POST['name'];
echo json_encode($data);
}
?>
<form>
<input type="text" name="name">
<input type="submit" value="Submit">
</form>
<div id="result"></div>
</body>
同一页面是否可以捕获和处理我们使用AJAX传递的变量?
答案 0 :(得分:4)
您在AJAX设置中设置了dataType : json
,因此您应该echo
一个json object而不是字符串(HTML)。
使用exit()
代替{ {1}},并将您的PHP放在页面的顶部。因此,在检查echo
是否存在之前,不会回显任何HTML。
另一件事是您的$_POST['name']
在该行上转换为字符串:
$data = array()
应为$data = 'You entered:' . $_POST['name'];
$data[] = ...
答案 1 :(得分:0)
添加die();函数和使用$ _SERVER ['HTTP_X_REQUESTED_WITH']来检测ajax请求。 alos将serialize()放在ajax函数的一边以获取数据
var data = '';
$(function() {
$('form').submit(function(e) {
e.preventDefault();
data = $(this).serialize();
$.ajax({
type : 'POST',
url : 'index.php',
data : data,
dataType : 'json',
encode : true
})
.done(function(data) {
$('#result').html(data);
})
});
});
<?php
$data = array();
if(isset($_POST['name']) && !empty($_SERVER['HTTP_X_REQUESTED_WITH'])) {
$data = 'You entered: ' . $_POST['name'];
echo json_encode($data);
die();
}
?>