【问题标题】:Zend Framework 2 Access Service via Ajax RequestZend Framework 2 通过 Ajax 请求访问服务
【发布时间】:2015-12-20 00:04:54
【问题描述】:

补充我之前的问题How to access a variable in my Service 我现在正在努力通过 Ajax 请求从我的 View Helper 访问服务。

我在 BookmarkAdvertService() 中添加了另一个方法来添加书签。

    public function saveAdvertBookmark($advertId)
    {
        $bookmark = new Bookmark();
        $userId = $this->getUserEntity()->getId();
        $bookmark->setUserId($userId);
        $bookmark->setAdvertId($advertId);

        # write new bookmmark to database tbl bookmark
        $this->getEntityManager()->persist($bookmark);
        $this->getEntityManager()->flush();
    }

在我的部分中,我添加了一个链接

 <?php if($bookmarkStatus==true){ ?>
           Saved !
           <a href="#" id="remove-bookmark">Remove Bookmark</a>
 <?php }else{ ?>
           <a href="#" id="add-bookmark">Add Bookmark</a>
 <?php }?>

 <script>
 $("#add-bookmark").click (function () {
            $.ajax({    
            dataType: 'json',
            url: '/add-bookmark',
            success: function(response) {
                    window.location.reload(true);       
            }
        });
    });
});
<script>
  1. 是否可以通过Ajax访问Service中的Method 要求?到目前为止,我一直只通过 Ajax 访问控制器 请求。
  2. 我想我必须通过 Ajax 以及 data: { id: advertId } 交出 advertID,这意味着我还必须通过 jQuery 写入和读出 advertId 或者是否有其他方法可以在我的服务中获取它?

这可能是一个非常愚蠢的问题,但是当我使用服务时我仍然很挣扎。非常感谢您的任何帮助。

【问题讨论】:

    标签: jquery ajax zend-framework2


    【解决方案1】:

    您应该在控制器中创建一个操作,该操作将使用该服务并将结果返回给 jquery 脚本。在 zf2 中,请求被分派到匹配的控制器动作,一个非常原始的示例应该如下所示:

    public function addBookmarkAction()
    {
        $id = $this->getEvent()->getRouteMatch()->getParam('id');
        $this->getServiceLocator()->get("BookmarkAdvertService")->saveAdvertBookmark($id);
        return $this->getResponse()->setStatusCode(200);
    }
    

    您应该将 id 添加到 url 的查询参数中(也相应地更新路由器)。或者通过 POST 发送请求并在控制器中从那里检索。

    【讨论】:

    • 感谢您的快速回复。好的,所以我不能直接跳到服务,如果我理解你的话。这100%确定吗?如果是这样就太糟糕了......否则我会尝试实施您的解决方案。
    • 不,你不能。 zf2 就是这样设计的,每个请求都会首先尝试匹配一个路由器,如果匹配到了,就会得到控制器和动作。
    • 哦,好的,再次确认一下,我确实需要 AJAX 链接的路由吗?
    • 是的,您需要一个路由才能将该请求与控制器操作相匹配。
    • 好的,非常感谢。我将看看如何为它找到正确的路线,以及我最终是否可以访问该服务。您为我指明了正确的方向,希望我现在可以走路了 :-)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-06-10
    • 1970-01-01
    • 1970-01-01
    • 2019-04-09
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多