2 qq 20377467 qq_20377467 于 2016.05.10 10:58 提问

ajax请求php一直执行error函数,数据库操作正常,错误500
 $.ajax({
                  type:"post",
                  url:"../php/insert_articles.php",
                  data:"title=" +tle +"&content=" + cnt +"&time=" +time + "&type=" + type,
                  dataType:"jsonp",
                  jsonp: "jsoncallback",
                  error:function(e) {
                    console.log("出错了:"+e.responseText);
                  },
                  success:function(msg){
                    alert("插入成功!");
                   }
            });


            php:

            $result = $db->query($insert);
    if ($result) {
        $list = array("msg" => "insert successfully");
            echo $_POST['jsoncallback']."(".json_encode($list).")";
    }else {

        $list = array("error" =>"an error ocurred");
            echo $_POST['jsoncallback']."(".json_encode($list).")";
    }
错误截图:
![图片说明](http://img.ask.csdn.net/upload/201605/10/1462849117_171571.jpg)

6个回答

qq_20377467
qq_20377467   2016.05.10 11:00
已采纳
showbo
showbo   Ds   Rxr 2016.05.10 11:07
 目测是没有跨域被jquery转为json数据了,你没有跨域不需要jsonp数据

$.ajax({
                  type:"post",
                  url:"../php/insert_articles.php",
                  data:"title=" +tle +"&content=" + cnt +"&time=" +time + "&type=" + type,
                  dataType:"json",




            $result = $db->query($insert);
    if ($result) {
        $list = array("msg" => "insert successfully");
            echo json_encode($list)//去掉回调
    }else {

        $list = array("error" =>"an error ocurred");
            echo json_encode($list)//去掉回调
    }
qq_20377467
qq_20377467 回复无聊码农: 测试了一下是$result->free()有问题
一年多之前 回复
qq_20377467
qq_20377467 回复无聊码农: 真的哎,去掉就可以了,谢谢你。可是为什么这两句有问题呢??
一年多之前 回复
showbo
showbo 回复qq_20377467: 你看你截图http状态码是500,500就是php动态页有问题,肯定不会执行success的。$result->free(); $db->close();应该这2句报错了,去掉看看
一年多之前 回复
qq_20377467
qq_20377467 回复无聊码农: 没什么特殊处理啊,很困惑,就是一个简单的数据库的插入操作嘛。
一年多之前 回复
showbo
showbo 回复qq_20377467: 你php页面是不是做了什么特殊处理,出错设置和http状态为500,但是最后又可以执行echo,因为http状态不失200,其他的都是执行error回调的,所以会出现你那个图片的问题,能正常放回内容,但是状态是500(500是服务器端出错,ajax也会判断这个错误的,不是200状态不执行success)
一年多之前 回复
showbo
showbo 回复qq_20377467: 去网络选项卡看ajax返回什么内容。。指定到echo不应该是500状态,500是php页面报错了,返回的应该是错误信息,而不是json_encode的内容才对
一年多之前 回复
qq_20377467
qq_20377467 我之前试了下json啊,不行的。然后上网搜说可能跨域,改成这样也不行
一年多之前 回复
qq_20377467
qq_20377467   2016.05.10 11:14

我之前试了下json啊,不行的。然后上网搜说可能跨域,改成这样也不行

qq_20377467
qq_20377467   2016.05.10 11:16

$.ajax({
type:"post",
url:"../php/insert_articles.php",
data:"title=" +tle +"&content=" + cnt +"&time=" +time + "&type=" + type,
dataType:"json",
error:function(e) {
console.log("出错了:"+e.responseText);
},
success:function(msg){
alert("插入成功!");
}
});

        php:
        $result = $db->query($insert);
if ($result) {
    $list = array("msg" => "insert successfully");
        echo json_encode($list);
}else {

    $list = array("error" =>"an error ocurred");
        echo json_encode($list);
}
也是一样的错误,执行error,http://img.ask.csdn.net/upload/201605/10/1462849227_30159.jpg
郁闷啊啊啊啊
qq_20377467
qq_20377467   2016.05.10 12:05

<?php
$title = $_POST['title'];
$content = $_POST['content'];
$time = $_POST['time'];
$type = $_POST['type'];
$say_cont = $_POST['say_cont'];

@ $db = new mysqli('localhost', 'a0424114830', 'xxvaq950228', 'a0424114830');
mysql_query("SET  NAMES 'utf8'");
if ($say_cont != '') {
    $insert = "insert into says (sub_date,say) values ('".date('Ymd')."','".$say_cont."')";
}else {
    $insert = "insert into articles(title, time, content, type) values('".$title."','".$time."','".$content."','".$type."')";
}

$result = $db->query($insert);
if ($result) {
    $list = array("msg" => "insert successfully");
        echo json_encode($list);
}else {

    $list = array("error" =>"an error ocurred");
        echo json_encode($list);
}
$result->free();
$db->close();

?>
整个.php的内容

hsd2012
hsd2012   2016.05.10 13:21

JS部分改为以下就好。

 $.ajax({
              type:"post",
              url:"../test2/a1.php",
              data:"title=" +tle +"&content=" + cnt +"&time=" +time + "&type=" + type,
              error:function(e) {
                console.log("出错了:"+e.responseText);
              },
              success:function(msg){
                alert("插入成功!");
               }
        });

Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!