AJAX – nefunkčnost některých odkazů
- dex11
- Člen | 11
Zdravím,
zkouším rozchodit ajax a nějak mi blbnou odkazy. Používám nette.ajax.js a mám komponentu menu, kde jsem odkazům přiřadil class=„ajax“. Pokud kliknu v menu na odkaz první úrovně <ul><li> tak se mi požadavek provede a v network mám zobrazen typ application/json, pokud kliknu na odkaz druhé úrovně <ul><li><ul><li> tak se mi nic neprovede a v network je typ text/html. Nevíte v čem by mohl být problém?
- iguana007
- Člen | 970
Tipoval bych to spíše na CSS problém (z-index apod.) – tj. že ti
ten link něco překrývá a event click se nezavolá.
Začal bych tím, že bych si zkusil vypnout komplet CSSka (třeba takto:
http://stackoverflow.com/…ing-purposes ) a vyzkoušel,
jestli ten odkaz funguje.
EDIT: beru zpět … tvůj popis „tak se mi nic neprovede a v network je typ text/html“ jsem pochopil tak, že se ti tam neprovede vůbec žádné volání směrem na server – pochopil jsem to až po přečtení komentářů níže, takže v css problém nebude
Editoval iguana007 (20. 8. 2014 15:55)
- jiri.pudil
- Nette Blogger | 1032
Ukaž nějaký kód: kde a jak vytváříš ty odkazy + zpracování v presenteru.
- dex11
- Člen | 11
vrátí to celou stránku v html
hlavička:
`Remote Address:::1:80
Request URL:http://…
Request Method:GET
Status Code:200 OK
Request Headersview source
Accept:/
Accept-Encoding:gzip,deflate,sdch
Accept-Language:cs-CZ,cs;q=0.8,en;q=0.6
Connection:keep-alive
Cookie:PHPSESSID=5kq9um1ikvt3ukrgksqkop3oi1; nette-browser=icmtyq4wh4
Host:localhost
Referer:http://…
User-Agent:Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like
Gecko) Chrome/36.0.1985.143 Safari/537.36
X-Requested-With:XMLHttpRequest
Response Headersview source
Cache-Control:no-store, no-cache, must-revalidate, post-check=0, pre-check=0
Connection:Keep-Alive
Content-Length:5220
Content-Type:text/html; charset=utf-8
Date:Thu, 21 Aug 2014 05:29:06 GMT
Expires:Thu, 19 Nov 1981 08:52:00 GMT
Keep-Alive:timeout=5, max=100
Pragma:no-cache
Server:Apache/2.4.9 (Win32) OpenSSL/1.0.1f PHP/5.5.14
Set-Cookie:PHPSESSID=5kq9um1ikvt3ukrgksqkop3oi1; path=/; httponly
Set-Cookie:nette-browser=icmtyq4wh4; path=/; httponly
Vary:X-Requested-With
X-Frame-Options:SAMEORIGIN
X-Powered-By:Nette Framework
`
- dex11
- Člen | 11
šablona menu:
<script src="{$basePath}/js/menu-left.js"></script>
<div class="menu-left">
<div id="left">
<ul>
{foreach $config['left'] as $level1}
{if $level1['target'] == '#'}
<li><h3><span class="glyphicon glyphicon-{$level1['icon']}"></span>{$level1['text']}</h3>
{else}
{ifset $level1['action']}
{var $action=$level1['action']}
{else}
{var $action='Default'}
{/ifset}
{if $user->isAllowed($level1['target'],$action)}
<li><h3><a href="{$presenter->link($level1['target'].':'.$action)}" class="ajax"><span class="glyphicon glyphicon-{$level1['icon']}"></span>{$level1['text']}</a></h3>
{/if}
{/if}
{ifset $level1['items']}
<ul>
{foreach $level1['items'] as $level2}
{ifset $level2['action']}
{var $action=$level2['action']}
{else}
{var $action='Default'}
{/ifset}
{if $user->isAllowed($level2['target'],$action)}
<li><a href="{$presenter->link($level2['target'].':'.$action)}" class="ajax">{$level2['text']}</a></li>
{/if}
{/foreach}
</ul>
{/ifset}
</li>
{/foreach}
</ul>
</div>
</div>
presenter menu:
<?php
use Nette\Application\UI\Control,
Nette\Object;
class Menu extends Control
{
public $presenter;
public $config;
public $type;
public function initialize($menu, $presenter, $type)
{
$this->presenter=$presenter;
$this->type=$type;
$this->config=$menu;
}
public function render()
{
$template = $this->template;
$template->setFile(dirname(__FILE__).'/menu.'.$this->type.'.latte');
$template->presenter=$this->presenter;
$template->config=$this->config;
$template->render();
}
}
class MenuGroup extends Object
{
public $target;
public $text;
public $items;
public function __construct($target, $text="New link")
{
$this->target = $target;
$this->text = $text;
$this->items = array();
}
public function addItem($item)
{
$this->items[]=$item;
}
}
class MenuItem extends Object
{
public $target;
public $text;
public function __construct($target, $text="New link")
{
$this->target = $target;
$this->text = $text;
}
}
@layout
{**
* Layout of Nette Framework example CD collection
*
* @param string $robots tell robots how to index the content of a page (optional)
* @param string $basePath web base path
* @param array $flashes flash messages
* @param Nette\Web\User $user current user
*}
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<meta n:ifset="$robots" name="robots" content="{$robots}">
<title>{block title|striptags|trim}{/block} | CIRC</title>
<link href="{$basePath}/css/bootstrap.min.css" rel="stylesheet">
<script src="{$basePath}/js/bootstrap.min.js"></script>
<script src="{$basePath}/lib/jquery-2.1.1.min.js"></script>
<script src="{$basePath}/lib/jquery-ui.min.js"></script>
<link rel="stylesheet" media="screen" href="{$basePath}/lib/jquery-ui.min.css" />
<script src="{$basePath}/lib/nette.ajax.js"></script>
<script src="{$basePath}/js/ajax.js"></script>
<link rel="stylesheet" media="screen" href="{$basePath}/css/site.css" />
</head>
<body>
<img id="logo" src="{$basePath}/img/logo.png">
{control menu-top}
{control menu-left}
<div id="view">
<div n:foreach="$flashes as $flash" class="flash {$flash->type}">{$flash->message}</div>
<div id="view-content">
{snippet a}
{include content}
{/snippet}
</div>
</div>
<script src="http://nette.github.com/resources/js/netteForms.js"></script>
</body>
</html>
- jiri.pudil
- Nette Blogger | 1032
Myslel jsem hlavně to zpracování v cílovém presenteru. Protože jestli ti to vrátí celou stránku (což je výchozí chování), pak tam asi nikde neděláš nic pro to, aby se poslal JSON.