未在jquery中调用done函数

未在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();

即使在请求数据之后,在jquery中也没有调用done函数

AJAX Post请求:
({“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)并检查控制台中的数组、空变量或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);
}