源代码:
<?php
if ($_SERVER['REQUEST_METHOD'] == 'POST'){
header('Content-Type: application/json');
echo json_encode($_POST);
exit(0);
}
?>
<html>
<head>
<title>Web Test</title>
<script src="js/jquery.min.js"></script>
</head>
<body>
<form id="formTest">
<input name="username" value="admin" />
<input name="password" type="password" value="admin_pass" />
</form>
<script type="text/javascript">
$.ajaxSetup({
data: {role: 'admin'} //(I)
});
//Ajax to current page
$.ajax('test', {
method: 'post',
data: $('#formTest').serialize() //(II)
,success: function(res){
console.log(res);
}
});
</script>
</body>
</html>
我想通过jQuery AJAX发送表单数据,并将默认数据(role=admin
)附加到每个AJAX请求中,但它不能按我的意愿工作。
我采取如下选项:
data: {role: 'admin'} //(I)
(默认数据)data: $('#formTest').serialize() //(II)
(表单数据){username: "admin", password: "admin_pass"}
data: 'role=admin' //(I)
data: $('#formTest').serialize() //(II)
data: [{name: 'role', value: 'admin'}] //(I)
data: $('#formTest').serializeArray() //(II)
data: {role: 'admin'} //(I)
data: {username: 'admin', password: 'admin_pass'} //(II)
$('#formTest').serializeObject()
(来自here)。
那么,有没有办法只用jQuery来解决这个问题呢?
JQuery提供了ajaxSetup
和serialize/serializeArray
方法,但它们似乎并不能很好地相互配合。
答案 0 :(得分:2)
为什么不附加带有理想数据的变量?
<html>
<head>
<title>Web Test</title>
<script src="http://code.jquery.com/jquery-latest.js"></script>
</head>
<body>
<form id="formTest">
<input name="username" value="admin" />
<input name="password" type="password" value="admin_pass" />
</form>
<script>
var theRole = '&role=admin';
//Ajax to current page
$.ajax('test.php', {
method: 'post',
data: $('#formTest').serialize() + theRole,
success: function(res) {
console.log(res);
}
});
</script>
</body>
</html>
修改强>
另一种方法,使用ajaxSetup()
<html>
<head>
<title>Web Test</title>
<script src="http://code.jquery.com/jquery-latest.js"></script>
</head>
<body>
<form id="formTest">
<input name="username" value="admin" />
<input name="password" type="password" value="admin_pass" />
</form>
<script>
$.ajaxSetup({ data: {role: 'admin'} });
//Ajax to current page
$.ajax('test.php?' + $('#formTest').serialize(), {
method: 'post',
success: function(res) {
console.log(res);
}
});
</script>
</body>
</html>
然后必须使用json_encode($ _REQUEST)。
<?php
if( $_SERVER['REQUEST_METHOD'] == 'POST' ) {
header( 'Content-Type: application/json' );
echo json_encode( $_REQUEST );
}
?>