Zend Framework 2通过Ajax请求访问服务

时间:2015-09-22 20:45:08

标签: jquery ajax zend-framework2

除上一个问题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访问服务中的Method 请求?到目前为止,我一直只能通过Ajax访问Controller 请求。
  2. 我想我必须通过Ajax移交advertID以及数据:{id:advertId},这意味着我必须通过jQuery编写和读取advertId,或者是否有其他方法可以在我的服务中获取它?
  3. 这可能是一个非常愚蠢的问题,但在使用服务时我仍然很挣扎。非常感谢您提前寻求帮助。

1 个答案:

答案 0 :(得分:2)

您应该在控制器中创建一个将使用该服务的操作,并将结果返回给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发送请求并从控制器中进行检索。