未在jquery中调用done函数
即使在请求数据之后,在jquery中也没有调用done函数 AJAX Post请求:未在jquery中调用done函数,jquery,Jquery,即使在请求数据之后,在jquery中也没有调用done函数 AJAX Post请求:({“name”:“name”,“fname”:“testing”,“ques”:“question”,“sec”:“answer”}) 来自php的响应:({“无效”:“错误”}) 即正在执行else部分&不满足if条件 jQuery代码: $("#askques").on("submit", function(event) { event.preventDefault();
({“name”:“name”,“fname”:“testing”,“ques”:“question”,“sec”:“answer”})
来自php的响应:({“无效”:“错误”})
即正在执行else部分&不满足if条件
jQuery代码:
$("#askques").on("submit", function(event) {
event.preventDefault();
$.fn.serializeObject = function()
{
var o = {};
var a = this.serializeArray();
$.each(a, function() {
if (o[this.name] !== undefined) {
if (!o[this.name].push) {
o[this.name] = [o[this.name]];
}
o[this.name].push(this.value || '');
} else {
o[this.name] = this.value || '';
}
});
return o;
};
var formdata=JSON.stringify(($('#askques').serializeObject()));
$.ajax({
type: 'POST',
contentType: "Content-Type: application/json",
url: 'ajaxphp/askques.php',
data: formdata,
dataType: 'json',
cache: false
}).done(function(data) {
if ('url' in data) {
$("#asknext").load("quesans/form.htm", function () {
$("#askcon").hide();
});
}
else if('prob' in data)
{
$("#resposne").text("Something went wrong, try again.");
}
else if('invalid' in data)
{
$("#resposne").text("Enter just the First Name, a word with letters only !");
}
});
});
PHP代码:
$name = $_POST["name"];
$fname = $_POST["fname"];
$ques = $_POST["sec"];
$ans = $_POST["ans"];
$time=date("y-m-d H:i:s");
if (ctype_alpha($name) && ctype_alpha($fname) && (strlen($ques)<=512) && (strlen($ans<=1024)) && (strlen($ques)>3) && (strlen($ans)>3) )
{
// not executed
}
else
{
$data = array('invalid' => "error" );
echo json_encode($data);
}
$name=$\u POST[“name”];
$fname=$_POST[“fname”];
$ques=$_POST[“sec”];
$ans=$_POST[“ans”];
$time=日期(“y-m-d H:i:s”);
if(ctype_alpha($name)和ctype_alpha($fname)和&(strlen($ques)3))
{
//未执行
}
其他的
{
$data=数组(“无效”=>“错误”);
echo json_编码($data);
}
即使在请求数据并从php文件获得响应之后,在jquery中也没有调用done函数,但else部分正在执行,并且不满足if条件。问题在于您正在检查
数据
对象中的属性。像这样更改您的done()
,它应该可以工作:)
删除上面的代码行,当使用它时,您不会在php中获得$\u POST变量
$.ajax({
type: 'POST',
//contentType: "Content-Type: application/json",
url: 'ajaxphp/askques.php',
data:{"name":"name","fname":"testing","ques":"question","sec":"answer"},
dataType: 'json',
cache: false
}).done(function(data) {
console.log(data);
if ('url' in data) {
$("#asknext").load("quesans/form.htm", function () {
$("#askcon").hide();
});
}
else if('prob' in data)
{ alert("Entered Prob")
$("#resposne").text("Something went wrong, try again.");
}
else if('invalid' in data)
{
alert("Entered Invalid")
$("#resposne").text("Enter just the First Name, a word with letters only !");
}
});
在下面的php文件中
//print_r($_POST);
$name = $_POST["name"];
$fname = $_POST["fname"];
$ques = $_POST["sec"];
$ans = $_POST["ans"];
$time=date("y-m-d H:i:s");
if (ctype_alpha($name) && ctype_alpha($fname) && (strlen($ques)<=512) && (strlen($ans<=1024)) && (strlen($ques)>3) && (strlen($ans)>3) )
{
$data = array('prob' => "error" );
echo json_encode($data);
}
else
{
$data = array('invalid' => "error" );
echo json_encode($data);
}
//print\u r($\u POST);
$name=$_POST[“name”];
$fname=$_POST[“fname”];
$ques=$_POST[“sec”];
$ans=$_POST[“ans”];
$time=日期(“y-m-d H:i:s”);
if(ctype_alpha($name)和ctype_alpha($fname)和&(strlen($ques)3))
{
$data=数组('prob'=>“错误”);
echo json_编码($data);
}
其他的
{
$data=数组(“无效”=>“错误”);
echo json_编码($data);
}
输入上述代码后,请尝试查看是否收到任何警报
如果它没有发出警报,则取消对我给出的php代码的第一行的注释并检查控制台响应,如果发布了,您将看到一个变量数组,否则您将看到空数组您使用的是什么jquery版本和什么浏览器?jquery-2.1.1.min.js,浏览器-在chrome和Mozilla上都尝试过,可能存在解析错误。尝试包含一个。我想这可能是问题所在,通常302个响应会在响应头中有新位置,以便浏览器可以自动向该新url发出请求,但Ajax调用不能很好地处理302个响应,因此,将服务器配置为发出200响应而不是302响应:)contentType应该是
application/json
,而不是Content-Type:application/json
。我对PHP服务器没有任何想法,可能是其他人可以帮助:)我也做了同样的事情,但结果是一样的。实际上,在php$\u POST中没有接收值,也许应该使用其他方式来接收值。在发送请求之前,您正在使用JSON.stringify()
,因此所有请求参数都将作为JSON字符串发送到服务器,您必须在php中解析该JSON字符串,然后引用其中的属性$_POST不起作用,因为在您的请求中没有带有名称的属性,所有值都合并到一个字符串中DevTools->Network->AJAX调用->Headers
并查看调用中发布的表单参数。将表单数据作为json或post参数发送的有效方式是什么?这取决于,如果post数据只是一组键值对,然后,正常的方法可以,但是如果你有复杂的参数,比如要用一个参数名发送的值列表,使用jsoni也可以,用{“prob”:“error”}作为响应得到prob的警报框,这意味着?现在用数据:{“name”:“name”:“name”,“fname”:“testing”,“ques”:“question”,“sec”:“answer”},
替换为数据:formdata,
仍然可以看到您得到相同的结果formdata的值将取自您的旧代码var formdata=JSON.stringify(($('#askques').serializeObject())代码>除了我提供的ajax和PHP之外,其余的代码是Yoursow取消注释这个print\r($\u POST)在php中编写>并检查控制台中的数组、空变量或post变量
$.ajax({
type: 'POST',
//contentType: "Content-Type: application/json",
url: 'ajaxphp/askques.php',
data:{"name":"name","fname":"testing","ques":"question","sec":"answer"},
dataType: 'json',
cache: false
}).done(function(data) {
console.log(data);
if ('url' in data) {
$("#asknext").load("quesans/form.htm", function () {
$("#askcon").hide();
});
}
else if('prob' in data)
{ alert("Entered Prob")
$("#resposne").text("Something went wrong, try again.");
}
else if('invalid' in data)
{
alert("Entered Invalid")
$("#resposne").text("Enter just the First Name, a word with letters only !");
}
});
//print_r($_POST);
$name = $_POST["name"];
$fname = $_POST["fname"];
$ques = $_POST["sec"];
$ans = $_POST["ans"];
$time=date("y-m-d H:i:s");
if (ctype_alpha($name) && ctype_alpha($fname) && (strlen($ques)<=512) && (strlen($ans<=1024)) && (strlen($ques)>3) && (strlen($ans)>3) )
{
$data = array('prob' => "error" );
echo json_encode($data);
}
else
{
$data = array('invalid' => "error" );
echo json_encode($data);
}