php - 如何在 Symfony2 中使用 jquery/Ajax 从 PHP 文件中获取数组字段值?

标签 php jquery html symfony twig

我正在使用 Symfony2 开发一个社交网站。事实上,我想知道如何在 Symfony2 中使用 jquery/Ajax 从 PHP 文件中获取数组字段值。在我的项目文件夹中的文件中,有两个文件:test.html.twig 和 moslem1.php。这两个文件的代码如下:

test.html.twig的代码:

 <html>
    <head>
    </head>
    <body>
        <script src="{{asset('bundles/moslemtest/src/jquery.min.js')}}" type="text/javascript"></script>
        <script type="text/javascript">
            $(document).ready(function() {
                $.ajax({
                    url: '{{asset('bundles/moslemtest/phptest/moslem1.php')}}',
                    type: 'POST',
                    dataType: 'JSON',
                    success: function(data1) {
                        var id=data1.id;
                        document.write(id);
                    }
                });
            });
        </script>
    </body>
</html>

moslem1.php的代码:

    <?php
$con=mysqli_connect("localhost","root","","test");
if (mysqli_connect_errno()) {
    echo "Failed to connect to MySQL: " . mysqli_connect_error();
}
$result = mysqli_query($con,"SELECT * FROM jqcalendar ORDER BY id DESC LIMIT 0, 1");
while($row = mysqli_fetch_array($result)) {
    $notification = array('id'=>$row['Id'],'subject'=>$row['Subject'],'location'=>$row['Location'],'description'=>$row['Description'],'starttime'=>$row['StartTime'],'endtime'=>$row['EndTime']);
}
echo json_encode($notification);
mysqli_close($con);
?>

问题是每当我运行文件 test.html.twig 时,它都会显示以下内容:

未定义

奇怪的是,当我将文件 test.html.twig 的代码放入 html 文件时,它会起作用。事实上,我创建了另外两个文件(不在 Symfony2 中),它们是 t1.html 和 moslem1.php。他们的代码如下:

t1.html的代码:

    <html>
    <head>
    </head>
    <body>
        <script src="jquery.min.js" type="text/javascript"></script>
        <script type="text/javascript">
            $(document).ready(function() {
                $.ajax({
                    url: 'moslem1.php',
                    type: 'POST',
                    dataType: 'JSON',
                    success: function(data1) {
                        var id=data1.id;
                        document.write(id);
                    }
                });
            });
        </script>
    </body>
</html>

moslem1.php的代码:

    <?php
$con=mysqli_connect("localhost","root","","test");
if (mysqli_connect_errno()) {
    echo "Failed to connect to MySQL: " . mysqli_connect_error();
}
$result = mysqli_query($con,"SELECT * FROM jqcalendar ORDER BY id DESC LIMIT 0, 1");
while($row = mysqli_fetch_array($result)) {
    $notification = array('id'=>$row['Id'],'subject'=>$row['Subject'],'location'=>$row['Location'],'description'=>$row['Description'],'starttime'=>$row['StartTime'],'endtime'=>$row['EndTime']);
}
echo json_encode($notification);
mysqli_close($con);
?>

正如我上面所说,它在我处理 HTML 文件时有效,但是当我在 Symfony2 上工作时,我必须使用扩展名为“html.twig”的文件来查看(输出)。所以我的问题是我应该怎么做才能使它与我的 Twig 文件一起正常工作?

提前致谢。

最佳答案

将 php 文件放入 bundles 文件夹是一个非常糟糕的主意,这是一个巨大的安全问题。如果您想要 AJAX 响应,请将其放入 Controller 。

像往常一样在 Controller 中创建一个新 Action 。编写 AJAX 操作并返回一个 JSONResponse 作为响应。

/**
* Return an ajax response
*/
public function ajaxAction(){
   // do the controller logic
   // $response is an array()
   return new JSONResponse($response);
}

然后在 jQuery ajax 中像这样设置 url:

$.ajax({
  url: 'url/to/your/controller', // If you use the FOSJsRoutingBundle then it will be Routing.generate('route_name')
  type: 'POST',
  dataType: 'JSON',
  success: function(data1) {
    var id=data1.id;
    document.write(id);
  }
});

在新操作中,您可以使用 EntityManager 访问您的数据库。

这里有一篇关于这个问题的好文章:http://symfony2forum.org/threads/5-Using-Symfony2-jQuery-and-Ajax

您还应该考虑使用 FOSJsRoutingBundle 进行 javascript 路由。 这是一个非常棒的包,允许您在 javascript 文件中生成路由,就像您可以使用 path('path_name') 命令在 twig 中生成路由一样。

这是这个包的 GitHub 项目:https://github.com/FriendsOfSymfony/FOSJsRoutingBundle

尝试理解 Symfony 请求 -> 响应过程,因为如果你不遵循它,它会给你带来严重的问题。

关于php - 如何在 Symfony2 中使用 jquery/Ajax 从 PHP 文件中获取数组字段值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23914069/

相关文章:

php - 如何在 Laravel 中将数组对象和数据添加到 JSON

javascript - 对自定义 html 数据执行操作?

javascript - 在html中显示react javascript

php - $_SERVER ['SERVER_ADDR' ] 可以安全依赖吗?

php - 按查询加入/分组返回奇怪的结果

javascript - 切换jquery动画出现错误

javascript - 如何在 javascript for 循环中输出数组中的元素?

javascript - 单击 JavaScript 更改类中所有元素的颜色

javascript - 尝试创建连续的 on.click 事件

php - Laravel 4.2 多对多关系,使用其他默认 ID