【问题标题】:Failed to use ajax transfer json data failed to insert with pdo statement and return undefined data使用ajax传输json数据失败用pdo语句插入失败返回未定义数据
【发布时间】:2013-12-02 15:22:32
【问题描述】:

我尝试尽可能简化代码,以便您可以重新创建场景。 我不明白为什么数据插入会失败,因为$('#qcategory').val() 和$('#qtype').val();都是简单的值=1。 ajax 将始终返回带有未定义数据的错误。 不明白json传入php后数据哪里出错了。

这是否意味着一旦将json数据传递到php中,就像我解码并从php返回一样? print $users->addQ($user) 返回的数据到底是什么?

这几天我一直在纠结这个问题。我一定错过了一些非常重要的事情。请帮我解决这个问题!真的会很感激!

如果你不明白这个问题,请告诉我你不清楚的地方。 如果它因为您无法解决问题而投票,那么投票并没有真正的帮助。谢谢

quiz_controller.js

$(function() {
$(document).on("click", "input#done-add-question", function(){ addQuestion(this); });   
});
function addQuestion(element) { 
    alert('add_question ran!');
    $('#indicator').show();
    var User = new Object();
    User.qcategory = $('#qcategory').val();
    User.qtype = $('#qtype').val();
        $.ajax({
            type: "POST",
            url: ".../controller/quiz_controller.php",
            dataType: "json",
            data: {
                //"page":page, //page: value in the url php  : currentpage: value in js 
                action: 'add_question',
                user: userJson
            },
            success: function(data, textStatus) {
                alert('add_question works!');
                $('#indicator').hide();
            },//success: function(data) END
            error: function(jqXHR, XMLHttpRequest, textStatus, errorThrown,data) { 
                alert('add question error!');
                alert(" textStatus " + textStatus+" errorThrown " + errorThrown +" XMLHttpRequest " + XMLHttpRequest); 
                alert("now the data is "+data)
                console.log('1'+jqXHR+" |t|t| " +textStatus+" |e|e| " + errorThrown +" |x|x| " + XMLHttpRequest); 
                console.log('data = '+data); 

            } //error END
    });//$.ajax() END
}

quiz_controller.php

<?php
function __autoload($className){
    $classNameUrl="../model/$className.php";
    include_once($classNameUrl);
}

$users=new Quiz("localhost","us","pw","equizz");
/*$_POST['action'] ='add_question';
$_POST['user'] ="fs";*/
if(!isset($_POST['action'])) {
    print json_encode(0);
    print " empty! not ready!";
    return;
}
if(get_magic_quotes_gpc()){
    $userParams = stripslashes($_POST['user']);
} else {
    $userParams = $_POST['user'];
}
switch($_POST['action']) {
    case 'add_question':
        $user = new stdClass;
        $user = json_decode($userParams );
        print $users->addQ($user);      
    break;
    }

exit();?>

/model/Quiz.php

<?php

    class Quiz {

        private $dbh;

        public function __construct($host,$user,$pass,$db)  {       
            $this->dbh = new PDO("mysql:host=".$host.";dbname=".$db,$user,$pass);       
        }
        public function addQ($user){    
            $sth = $this->dbh->prepare("INSERT INTO eq_question1(`qCatID`, `qTypID`) VALUES (?, ?)");
            $sth->execute(array($user->qcategory, $user->qtype));       

            return json_encode($this->dbh->lastInsertId());
        }
    }//class Quiz END

    ?>

HTML

<form> 
                                <h1>New Question Settings</h1> 
                                <p> 
                                    <label for="qcategory" class="" data-icon="u" > Category </label><br/>
                                    <select id="qcategory" name="qcategory" required="required">
                                      <option value="1">bb</option>
                                      <option value="2">cc Operators</option>

                                    </select>
                                </p>
                                <p> 
                                    <label for="qtype" class="" data-icon="u" > Type </label><br/>
                                    <select id="qtype" name="qtype" required="required">
                                      <option value="1">ab</option>
                                      <option value="2">cd</option>
>
                                    </select>
                                </p>

                                <p class="add-question button"> 
                                    <input id="done-add-question" type="submit" value="Submit" /> 
                                                                </p>

                            </form>

Chrome Inspector 返回的错误 console.log

userJson = {"qcategory":"1","qtype":"1"} quiz_controller.js:214
1[object Object] |t|t|  |e|e| undefined |x|x| error quiz_controller.js:257
data = undefined 

【问题讨论】:

    标签: php ajax jquery pdo


    【解决方案1】:

    在您的 quiz_controller.js 中尝试以下操作:

    $(function() {
    $(document).on("click", "input#done-add-question", function(){ addQuestion(this); });   
    });
    function addQuestion(element) {
        var User = new Object();
        User.qcategory = $('#qcategory').val();
        User.qtype = $('#qtype').val();
        var userJson = JSON.stringify(User);
     $('#indicator').show();
    
        $.post('controller/quiz_controller.php',
            {
                action: 'add_question',
                user: userJson      
            },
                $('#indicator').hide(),
            "json"      
        );
    }
    

    在 quiz_controller.php 中删除:

    if(!isset($_POST['action'])) {
        print json_encode(0);
        print " empty! not ready!";
        return;
    }
    if(get_magic_quotes_gpc()){
        $userParams = stripslashes($_POST['user']);
    } else {
        $userParams = $_POST['user'];
    }
    

    替换为:

    if(!isset($_POST['action'])) {
    print json_encode(0);
    return;
    }
    
    if(isset($_POST['user'])) {
    $userParams = $_POST['user'];
    }
    

    【讨论】:

      猜你喜欢
      • 2011-06-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-11-12
      • 2023-03-22
      • 1970-01-01
      相关资源
      最近更新 更多