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

Zend Framework 2 Access Service via Ajax Request

对我之前的问题的补充 我现在正在努力通过 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();
    }

在我的部分我添加了一个link

 <?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 访问服务中的方法 要求?到目前为止,我一直只通过 Ajax 访问控制器 请求。
  2. 我想我必须通过 Ajax 交出 advertID 以及数据:{ id: advertId },这意味着我必须通过 jQuery 写入和读出 advertId 或者是还有其他方法可以在我的服务中获取它吗?

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

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