Javascript $\u POST在ajax表单提交中不起作用?
当我试图通过ajax表单提交检查用户输入名称是否已经存在时!但是它在Javascript $\u POST在ajax表单提交中不起作用?,javascript,php,json,ajax,Javascript,Php,Json,Ajax,当我试图通过ajax表单提交检查用户输入名称是否已经存在时!但是它在sessions.php中只得到未定义的索引:username,缺少什么 <form action="" method="POST" id="saveuser" enctype="multipart/form-data"> <input type="text" name="username"><br> <input type="password" name="pass"><b
sessions.php
中只得到未定义的索引:username
,缺少什么
<form action="" method="POST" id="saveuser" enctype="multipart/form-data">
<input type="text" name="username"><br>
<input type="password" name="pass"><br>
<input type="file" name="fileupload"><br>
<input type="submit" name="submit" value="Confirm" id="confirm">
</form>
<script type="text/javascript">
$('#confirm').click(function(e){
e.preventDefault();
$.ajax({
type:'POST',
url :"sessions.php",
data:$("#saveuser").serialize(),
contentType : false,
processData: false,
success: function(d){
console.log(d);//[error] :Undefined index: username
}
});
});
</script>
$(“#确认”)。单击(函数(e){
e、 预防默认值();
$.ajax({
类型:'POST',
url:“sessions.php”,
数据:$(“#saveuser”).serialize(),
contentType:false,
processData:false,
成功:功能(d){
console.log(d);//[错误]:未定义索引:用户名
}
});
});
sessions.php
<?php
$exist = "david";
if($_POST['username'] == $exist){
echo json_encode("Already exist");
}
else{
echo json_encode("You can succesfully add");
}
?>
删除表单标签中的方法,操作:post和blank,因为您只需要在ajax方法中提供所有详细信息 或者您可以删除表单标记本身,因为ajax方法将处理post调用 这将有望解决问题
<form id="saveuser" enctype="multipart/form-data">
将脚本更改为
<script type="text/javascript">
$(function(){
$('#confirm').click(function(e){
e.preventDefault();
$.ajax({
type:'POST',
url :"sessions.php",
data:$("#saveuser").serialize(),
contentType : false,
processData: false,
success: function(d){
console.log(d);//[error] :Undefined index: username
}
});
});
});
</script>
$(函数(){
$(“#确认”)。单击(函数(e){
e、 预防默认值();
$.ajax({
类型:'POST',
url:“sessions.php”,
数据:$(“#saveuser”).serialize(),
contentType:false,
processData:false,
成功:功能(d){
console.log(d);//[错误]:未定义索引:用户名
}
});
});
});
将$.post()用于ajax:
$('#confirm').click(function(e){
e.preventDefault();
$.post("sessions.php", $.param($("#saveuser").serializeArray()), function(data) { // use this ajax code
console.log(data);
});
});
您正在将contentType设置为false,这就是为什么PHP无法解析您的帖子正文的原因在html代码中使用以下代码并删除contentType:false, processData:false
<form action="" method="POST" id="saveuser" enctype="multipart/form-data">
<input type="text" name="username"><br>
<input type="password" name="pass"><br>
<input type="file" name="fileupload"><br>
<input type="submit" name="submit" value="Confirm" id="confirm">
</form>
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.0.0-rc1/jquery.min.js"></script>
<script type="text/javascript">
$('#confirm').click(function(e){
e.preventDefault();
$.ajax({
type:'POST',
url :"sessions.php",
data: $('#saveuser').serialize(),
success: function(d){
console.log(d);//[error] :Undefined index: username
}
});
});
</script>
$.ajax({
type:'POST',
url :"sessions.php",
data: $("#saveuser").serialize(),
success: function(d){
console.log(d);
}
});
$(“#确认”)。单击(函数(e){
e、 预防默认值();
$.ajax({
类型:'POST',
url:“sessions.php”,
数据:$('#saveuser')。序列化(),
成功:功能(d){
console.log(d);//[错误]:未定义索引:用户名
}
});
});
您需要更改脚本:
尝试使用newformdata
而不是.serialize()
$(“#确认”)。单击(函数(e){
e、 预防默认值();
var formData=new formData($(“#saveuser”)[0]);
$.ajax({
类型:'POST',
url:“tt.php”,
数据:formData,
contentType:false,
processData:false,
成功:功能(d){
console.log(d);//[错误]:未定义索引:用户名
}
});
});
注意:您被用于
contentType
到false
,这意味着jQuery不添加内容类型标题。您正在使用jQuery的.serialize()方法,该方法以标准URL编码表示法创建文本字符串。当使用“contentType:false”时,您需要传递未编码的数据。如果将contentType设置为false,则不会发送ajax头,结果是如果发送的内容type:POST
头不包含您的数据,所以服务器无法看到它。如果您使用GET
来执行此操作,它将起作用,因为数据是使用GET
(url后)发送的,而不是在标题中
只需删除contentType
<form action="" method="POST" id="saveuser" enctype="multipart/form-data">
<input type="text" name="username"><br>
<input type="password" name="pass"><br>
<input type="file" name="fileupload"><br>
<input type="submit" name="submit" value="Confirm" id="confirm">
</form>
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.0.0-rc1/jquery.min.js"></script>
<script type="text/javascript">
$('#confirm').click(function(e){
e.preventDefault();
$.ajax({
type:'POST',
url :"sessions.php",
data: $('#saveuser').serialize(),
success: function(d){
console.log(d);//[error] :Undefined index: username
}
});
});
</script>
$.ajax({
type:'POST',
url :"sessions.php",
data: $("#saveuser").serialize(),
success: function(d){
console.log(d);
}
});
contentType
(默认值:'application/x-www-form-urlencoded;
字符集=UTF-8')
类型:向服务器发送数据时为布尔值或字符串
服务器,请使用此内容类型。默认为
“application/x-www-form-urlencoded;charset=UTF-8”,适用于
大多数情况下。如果显式地将内容类型传递给$.ajax(),则
它总是发送到服务器(即使没有发送数据)。截至
jQuery 1.6您可以通过false告诉jQuery不要设置任何内容
键入标题。注意:W3CXMLHttpRequest规范规定
字符集总是UTF-8;指定另一个字符集不会强制
单击浏览器以更改编码。注意:对于跨域请求,
将内容类型设置为除
application/x-www-form-urlencoded、多部分/表单数据或text/plain
将触发浏览器向用户发送飞行前选项请求
服务器
processData用于按原样发送数据-
正在向服务器发送数据
默认情况下,Ajax请求使用GET HTTP方法发送。如果
如果需要POST方法,则可以通过设置
类型选项的值。此选项将影响
数据选项被发送到服务器。POST数据将始终为空
根据W3C,使用UTF-8字符集传输到服务器
XMLHTTPRequest标准
数据选项可以包含表单的查询字符串
key1=value1&key2=value2,或形式为{key1:'value1'的对象,
键2:'value2'}。如果使用后一种形式,则会转换数据
在发送查询字符串之前,使用jQuery.param()将其转换为查询字符串。这
通过将processData设置为false,可以避免处理。这个
如果希望将XML对象发送到,则可能不需要进行处理
服务器;在这种情况下,将contentType选项更改为
application/x-www-form-url编码为更合适的MIME类型
您的代码几乎没有问题,例如:
-
。。。它只在sessions.php中获得未定义的索引:username
问题在于以下两条线<?php $exist = "david"; if($_POST['username'] == $exist){ echo json_encode("Already exist"); } else{ echo json_encode("You can succesfully add"); } ?>
从 contentType(默认值:contentType : false, processData: false,
)'application/x-www-form-urlencoded;charset=UTF-8'
类型:
或Boolean
String
向服务器发送数据时,请使用此内容类型。默认值为“application/x-www-form-urlencoded;charset=UTF-8”,这在大多数情况下都适用。如果您显式地将内容类型传递给
,那么它总是被发送到服务器(即使没有发送数据)。从jQuery1.6开始,您可以传递$.ajax()
来告诉jQueryfalse
<form method="POST" id="saveuser" enctype="multipart/form-data"> <input type="text" name="username"/><br> <input type="password" name="pass"/><br> <input type="file" name="fileupload"/><br> <input type="button" name="save" id="save" value="save"/> </form> <script type="text/javascript"> $('#save').click(function(e){ var form = new FormData(document.getElementById('#saveuser')); $.ajax({ url :"sessions.php", type : 'POST', dataType : 'text', data : form, processData : false, contentType : false, success: function(d){ console.log(d);//[error] :Undefined index: username } }); }); </script>
processData : false, contentType : false,