bug^君 2016-02-18 20:48 采纳率: 25%
浏览 56

将JSON从Twig模板发送到PHP类,但是得到一个404错误?

我试图将JSON从Twig模板发送到PHP类,并将其保存在数据库中,但是我得到了一个404错误。

这是twig模板的内容。我的目标是发送这个注释掉的data变量,但为了测试的目的,我替换了它。

function saveUser()
{
    var e = document.getElementById("subject_select");
    var subject = e.options[e.selectedIndex].text;
    console.log(subject);

    var e2 = document.getElementById("mark_select");
    var mark = e2.options[e2.selectedIndex].value;
    console.log(mark);

    var e3 = document.getElementById("student_select");
    var student = e3.options[e3.selectedIndex].value;
    console.log(student);

    //var data = ({ subject:subject, mark:mark, student:student}).serialize();
    $.ajax({
            type: "POST",
            url: 'save/',
            data: {subject:"a", mark:1, student:2},
            success: function(response)
            {
               console.log(response);
            }
          });

php中的类:

class TestMark extends Controller
{
    /**
     * @Route("/save/", name="_save")
     */
    public function saveAction(){
        $mysqli = new mysqli("localhost", "root", null, "school");
            /* check connection */
        if (mysqli_connect_errno()) {
        printf("Connect failed: %s
", mysqli_connect_error());
        exit();
        }
        if (!$this->getRequest()->isXmlHttpRequest())
        {//no ajax request, no play...
            $this->redirect(
                $this->generateUrl('_gradebook')
            );
        }
        $jsonString = $this->getRequest();
        $jsonArray = json_decode($jsonString, true);
        /* create a prepared statement */
        if ($stmt = $mysqli->prepare('INSERT INTO marks (studentId, mark, subject) VALUES (?,?,?)')) {
            /* bind parameters for markers */
            $stmt->bind_param("ssss", $jsonArray['subject'], $jsonArray['mark'], $jsonArray['student']);
            /* execute query */
            $stmt->execute();
            /* close statement */
            $stmt->close();
        }
        /* close connection */
        $mysqli->close();
    }
}

更新:

经过一些更改后,我从Chrome控制台收到了类似日志的错误500:

GET http://host/save/ 500 (Internal Server Error)
l.cors.b.crossDomain.send @ jquery.min.js:4
n.extend.ajax @ jquery.min.js:4
n.(anonymous function) @ jquery.min.js:4
saveUser @ gradebook:66
onclick @ gradebook:125

JS and ajax:

<input type="hidden" value="{{ path('_save') }}" id="save_url">
        <script>

            function saveUser()
            {
                var requestUrl = $('#save_url').val();

                var e = document.getElementById("subject_select");
                var subject = e.options[e.selectedIndex].text;
                console.log(subject);

                var e2 = document.getElementById("mark_select");
                var mark = e2.options[e2.selectedIndex].value;
                console.log(mark);

                var e3 = document.getElementById("student_select");
                var student = e3.options[e3.selectedIndex].value;

                //var data = ({ subject:subject, mark:mark, student:student }).serialize();
                console.log(student);

                $.post('{{path('AppBundle_ajax_update')}}',
                        {subject: 'mydata1', mark:'mydata2', student:'mydata3'},
                        function(response){
                            if(response.code == 100 && response.success){//dummy check
                           //do something
                            }
                        }, "json");
            }

MarkController.php:

class MarkController extends Controller
{
    /**
     * @Route("/save/", name="_save")
     */
    public function saveAction(){

        $request = $this->container->get('request');

        $mark = new Mark();
        $mark->setSubject($request->query->get('subject'));
        $mark->setMark($request->query->get('mark'));
        $mark->setStudent($request->query->get('student'));

        $em = $this->getDoctrine()->getManager();

        $em->persist($mark);
        $em->flush();

        $response = array("code" => 100, "success" => true);
        return new Response(json_encode($response));
    }
}
  • 写回答

2条回答 默认 最新

  • weixin_33701294 2016-02-18 20:56
    关注

    Note: Rename your Controller class

    TestMark
    

    to

    TestMarkController
    
    评论

报告相同问题?

悬赏问题

  • ¥15 mmocr的训练错误,结果全为0
  • ¥15 python的qt5界面
  • ¥15 无线电能传输系统MATLAB仿真问题
  • ¥50 如何用脚本实现输入法的热键设置
  • ¥20 我想使用一些网络协议或者部分协议也行,主要想实现类似于traceroute的一定步长内的路由拓扑功能
  • ¥30 深度学习,前后端连接
  • ¥15 孟德尔随机化结果不一致
  • ¥15 apm2.8飞控罗盘bad health,加速度计校准失败
  • ¥15 求解O-S方程的特征值问题给出边界层布拉休斯平行流的中性曲线
  • ¥15 谁有desed数据集呀