如何使用Ajax将单个表单值传递给PHP?
我试图从一个Ajax函数传递一个值给我的PHP(在同一页面中),但无法设法抓住它。我用一个警告显示值,它似乎正常工作,但PHP永远不会收到它。 php在提交时可以正常工作,但我想使用Ajax,因此不需要页面刷新。如何使用Ajax将单个表单值传递给PHP?
AJAX
$(function(){
$('#ucli').on('input', function() {
var client = $('input[name="ucli"]').val();
var dataString = "ucli=" + client;
alert(dataString);
$.ajax({
type: "POST",
data: dataString,
success: function(response){
$('ucli').html(data);
}
});
});
});
PHP
if(isset($_POST['ucli'])){
$em = mysqli_real_escape_string($conn,$_POST['ucli'] . '');
//SQL STUFF
}
$(function(){
$('#ucli').on('input', function() {
var client = $('input[name="ucli"]').val();
var dataString = "ucli=" + client;
alert(dataString);
$.ajax({
type: "POST",
data: {ucli: client},
success: function(response){
$('ucli').html(data);
}
});
});
});
虽然此代码片段可能是正确的解决方案,[包括解释](https://meta.stackexchange.com/questions/114762/explaining-entirely-%E2%80%8C%E2%80%8Bcode-based-答案)确实有助于提高帖子的质量。请记住,您将来会为读者作答,而这些人可能不知道您的代码建议背后的原因。 –
不能使它仍然工作...我认为他们可能是一个小错误(?)。在数据中,不应该是dataString而不是客户端? Ty为你的答案。 – JuanjoC
$(function(){
$('#ucli').on('input', function() {
var client = $('input[name="ucli"]').val();
var dataString = "ucli=" + client;
alert(dataString);
$.ajax({
url: "path to php file",
type: "POST",
data: dataString,
success: function(response){
$('ucli').html(data);
}
});
});
});
请解释你做了什么,看起来完全相同。至少,格式化你的代码。 – Martijn
我已经为AJAX调用添加了一个URL参数。谢谢。 – user1544541
哈哈是的,我知道。但是把它添加到你的文章中,解释你所做的事情,而不是让人困惑。在这个小代码片段中是可行的,但是在更大或更复杂的答案中,不再有效 – Martijn
您未使用GET方法,这意味着你从PHP阅读后有效载荷://输入,这样的:
$entityBody = file_get_contents('php://input');
另一种可以将数据传递给url的选项是:yoururl?ucli = encodeURI(theValue) –
这将如何实现? – JuanjoC
第二个选项只是在$ .ajax中使用url参数,如'url?ucli'+ encodeURI(theValue),您当前的php代码应该可以工作,但是您应该在php $ _GET [' ucli'] –
PHP代码(发送到同一页面时)需要特别注意,以免整个页面内容在响应数据中返回。为此我倾向于用下面的办法 - ob_clean
是有用的,它会清除生成到该点的文件
<?php
if($_SERVER['REQUEST_METHOD']=='POST' && !empty($_POST['ucli'])){
/*
Prevent other page content prior to this point
being included in whatever response is sent by
clearing the output buffer
*/
ob_clean();
/* Capture post variable */
$ucli = filter_input(INPUT_POST, 'ucli', FILTER_SANITIZE_STRING);
/* Do stuff */
/* send response */
echo $ucli;
/*
Immediately terminate from this portion of code so that
the only response sent is what you determine above
*/
exit();
}
?>
Ajax的功能在任何HTML的输出缓冲器需要一个网址 - 你正尝试将POST请求发送到您可以使用location.href
的同一页面。回调(成功)函数应该处理响应,而在它看起来它正在处理发送的数据之前。
$(function(){
$('#ucli').on('input', function() {
var client = $('input[name="ucli"]').val();
var dataString = 'ucli=' + client;
$.ajax({
url: location.href,
type: 'POST',
data: dataString,
success: function(response){
$('ucli').html(response);
},
error: function(err){
alert(err)
}
});
});
});
整版例如
<!doctype html>
<html>
<head>
<title>jQuery</title>
<script src='//code.jquery.com/jquery-latest.js'></script>
<script>
$(function(){
$('#ucli').on('input', function() {
var client = $('input[name="ucli"]').val();
var dataString = 'ucli=' + client;
$.ajax({
url: location.href,
type: 'POST',
data: dataString,
success: function(response){
$('#result').html(response);
},
error: function(err){
alert(err)
}
});
});
});
</script>
</head>
<body>
<?php
if($_SERVER['REQUEST_METHOD']=='POST' && !empty($_POST['ucli'])){
/*
Prevent other page content prior to this point
being included in whatever response is sent by
clearing the output buffer
*/
ob_clean();
/* Capture post variable */
$ucli = filter_input(INPUT_POST, 'ucli', FILTER_SANITIZE_STRING);
/* Do stuff */
/* send response */
echo $ucli;
/*
Immediately terminate from this portion of code so that
the only response sent is what you determine above
*/
exit();
}
?>
<form name='jqt' method='post'>
ucli:<input type='text' name='ucli' id='ucli' />
<div id='result'></div>
</form>
</body>
</html>
你'$ .ajax'没有按;吨有'url',唯一缺少 –
@MilanChheda从来就读取,如果你不把它的默认选项为你的同一页。这是错的吗? – JuanjoC
嗯,你是对的@JuanjoC,我的小姐。 –