yii Ajax-ссылка не работает - PullRequest
0 голосов
/ 05 декабря 2011

Я поставил Ajax-ссылку, используя следующий код:

echo chtml::ajaxLink('GO', 'http://localhost/index.php?r=user/delete', array('method'=>'POST'));

Но, независимо от того, задан ли второй параметр как URL i, e 'http://localhost/index.php?r=user/delete'.Он генерирует ссылку с текущим URL в браузере, а не с URL, который я только что указал.В чем проблема?Как я могу создать ссылку AJAX?Google несколько часов, но не может решить проблему.Любая помощь высоко ценится.

Ответы [ 3 ]

3 голосов
/ 06 декабря 2011

Прежде всего, вы всегда должны пытаться создавать нормализованные URL.
Но я думаю, что ваше сомнение заключается в #, который генерируется / добавляется. Если вы пойдете и посмотрите источник yii ajaxLink, вы увидите следующее:

public static function ajaxLink($text,$url,$ajaxOptions=array(),$htmlOptions=array())
{
    if(!isset($htmlOptions['href']))
        $htmlOptions['href']='#';
    $ajaxOptions['url']=$url;
    $htmlOptions['ajax']=$ajaxOptions;
    self::clientChange('click',$htmlOptions);
    return self::tag('a',$htmlOptions,$text);
}

, поэтому, если вы не установите свойство href тега a в массиве htmloptions, будет добавлено #.

Вы также должны понимать, что yii использует jquery, поэтому, если вы проверите исходный код страницы, вы увидите внизу, как jquery используется для выполнения запроса ajax, ваш фактический URL, который вызывается, также будет виден в этот сценарий. Таким образом, третий параметр / параметр в ajaxLink предназначен для параметров функции jquery ajax. Используя эту опцию, вы можете создавать более качественные AJAX-ссылки.
Независимо от того, куда (на какой контроллер) указывает ваш URL в вашем проекте, будет вызываться действие, связанное с этим URL.

Так или иначе, вы можете изменить свой код следующим образом, если хотите, чтобы отображался URL, а не #:

echo CHtml::ajaxLink('GO', 'http://localhost/index.php?r=user/delete',
 array('type'=>POST), //there are various other options for jquery ajax
 array('href'=>'http://localhost/index.php?r=user/delete'));

Чтобы сделать AJAX-ссылки лучше, я бы посоветовал ознакомиться с документацией JQuery AJAX. Существует опция для функции success, которую вы можете использовать, чтобы сообщить пользователю о завершении операции.

Надеюсь, это поможет, не стесняйтесь оставлять комментарии, если я не полностью ответил на ваш вопрос.

1 голос
/ 05 декабря 2011

Вы пробовали:

echo CHtml::ajaxLink('GO', array('/user/delete'), array('method'=>'POST'));

, как подсказывает документация ajaxLink ...?Посмотрите также на метод normalizeUrl .

Использование этих методов, которые, в свою очередь, используют createUrl , обычно лучше, поскольку он позаботится о создании действительного URL дляваш сайт.

0 голосов
/ 15 ноября 2013

У меня была такая же проблема (или, возможно, похожая).Я использовал renderPartial для загрузки представления и позже в этом представлении я использовал ajaxLink , и он не работал.

Что я обнаружил, что при использовании renderPartial, не было сценария jquery для действия ajax.Что вам нужно сделать, это добавить 4-й аргумент (true) в функцию renderPartial для генерации скрипта jquery.

См. Документацию: http://www.yiiframework.com/doc/api/1.1/CController/#renderPartial-detail

Надеюсь, это поможет и сэкономит время, чтобы выяснить это.

...