我想创建一个ajax页面,我想知道如何正确地做到这一点? Essentialy我只需要获取页面数据,并阻止内容。
现在我通过在ipBeforeResponceSent事件中打印json并退出来快速而肮脏地解决问题,但它很难看......
class Event{
public static function ipBeforeResponseSent($event){
$ajax = ipRequest()->getQuery('ajax');
if ($ajax){
$page = ipContent()->getCurrentPage();
$data['status'] = 'success';
$data['url'] = $page->getLink();
$data['page'] = ipContent()->getBlockContent('main');
$data['title'] = $page->getTitle();
$data['id'] = $page->getId();
$data['pageorder'] = $page->getOrder();
$data['parent'] = $page->getParentId();
$data['timestamp'] = time();
exit(json_encode($data, true));
}
}
}
Javascript方面:
$.getJSON(PAGE_URL, {ajax: 'true'}, function(responce) {
if (responce.status == 'success'){
/***/
}
});
也许最干净的解决方案是将链接发送到我的插件控制器?
答案 0 :(得分:1)
正确使用AJAX:
传递两个参数:
sa:' Plugin.Action' securityToken:ip.securityToken(如果你在javascript中)
然后创建控制器操作并返回json响应对象:
返回new \ Ip \ Response \ Json($ data);
答案 1 :(得分:0)
我假设如果你有PAGE_URL
,你也可以使用page id
。
如果此功能仅与此特定网站相关,请使用Application
插件及其已存在的PublicController.php
。
public function getPageAjax()
{
// Allowing only post actions
ipRequest()->mustBePost();
// Getting page ID from posted data
$pageId = ipRequest()->getPost('pageId');
// Get page object
$page = ipContent->getPage($pageId);
if ($page != null) {
$data = array();
// Do what you need
return \Ip\Response\JsonRpc::result(array('data' => $data));
} else {
return \Ip\Response\JsonRpc::error("Page not found");
}
}
Javascript看起来像这样:
function applicationGetPageAjax(pageId) {
var postData = {
'pa': 'Application.getPageAjax',
'pageId': pageId,
'jsonrpc': '2.0'
};
$.ajax({
url: ip.baseUrl,
data: postData,
dataType: 'json',
type: 'POST',
success: function (response) {
if (response && response.result) {
// Do what you want with response
alert(response.result.data);
} else if (response && response.error && response.error.message) {
alert(response.error.message);
} else {
alert('Unknown response.');
}
},
error: function (response) {
alert('Unexpected error.' + response.responseText);
}
});
}
我还没有测试过。以此为原则。您可以在核心中找到类似AJAX操作的多个示例。