我一直在試圖找出這幾天現在。有人能夠更有經驗地看看我是否做錯了。Ajax沒有定義錯誤與symfony 1.4和sfProtoculousPlugin
這是建立在symfony 1.4,在sfProtoculousPlugin的幫助下爲input_auto_complete_tag。
我的模板:
<?php echo input_auto_complete_tag(
'tag', /*id_of_field*/
'', /*default_value_of_field*/
'tag/autocomplete', /*url_to_ajax_script*/
array('autocomplete' => 'off'), /*array_with_extra_tag_attributes*/
array('use_style' => 'true') /*array_with_options*/
) ?>
<input type="submit" name="submit" value="Tag me!" />
...
</form>
添加到我的routing.yml的頂部:
tag_autocomplete:
url: /tag_autocomplete
param: { module: tag, action: autocomplete }
創建的模板/ autocompleteSuccess.php:
<ul>
<?php foreach ($tags as $tag): ?>
<li><?php echo $tag ?></li>
<?php endforeach; ?>
</ul>
添加此動作, modules/tag/actions/action.class.php文件:
public function executeAutocomplete(sfWebRequest $request)
{
$this->tags = QuestionTag::getTagsForUserLike(
$this->getUser()->getGuardUser()->getId(),
$this->getRequestParameter('tag'),
10
);
}
添加了此方法的QuestionTag.class.php文件:
public static function getTagsForUserLike($user_id, $tag, $max = 10)
{
$tags = Doctrine_Query::create()
->select('qt.tag')
->from('QuestionTag qt')
->where('qt.user_id = ?', $user_id)
->andWhere("qt.tag LIKE '%".$tag."%'")
->orderBy('qt.tag')
->limit($max)
->fetchArray();
return $tags;
}
這裏是生成的js代碼:
//<![CDATA[
new Ajax.Autocompleter('tag', 'tag_auto_complete', '/frontend_dev.php/tag_autocomplete', {});
//]]>
在我的Firebug的控制檯,我得到以下錯誤:
Ajax is not defined
[Break On This Error]
...ax.Autocompleter('tag', 'tag_auto_complete', '/frontend_dev.php/tag_autocomplete...
我試了下面的命令,那可能是複製'資產'(js scrip點)到我的/網頁文件夾。它似乎有worked for some,但不適合我。
./symfony plugin:publish-assets sfProtoculousPlugin
我覺得我快到了。任何幫助將不勝感激。提前謝謝了。
更新1
在我/web/sfProtoculousPlugin
文件夾中我有:
css/
input_auto_complete_tag.css
js/
builder.js
controls.js
dragdrop.js
effects.js
index.html
prototype.js
scriptaculous.js
slider.js
sound.js
unittest.js
另外,我沒有看到一個<script>
標籤與prototype.js
內。
解決
將此添加到應用程序settings.yml
:
all:
.settings:
prototype_web_dir: /sfProtoculousPlugin
,這給應用view.yml
:
javascripts: [%SF_PROTOTYPE_WEB_DIR%/js/prototype, %SF_PROTOTYPE_WEB_DIR%/js/scriptaculous]
然後我跑./symfony cc
和刷新頁面。它現在可以按我的意圖完美工作。感謝j0k的幫助。
嘿j0k。我清除了緩存並運行了插件:publish-assets。裏面有一個文件夾和css和js文件夾以及它們各自的內容。在Firebug的Net標籤下,我沒有看到任何標記爲404的js。當我查看頁面源並搜索原型時,我在這裏找到它「javascripts:/ sfProtoculousPlugin/js/prototype:{}」,這裏是「sf_prototype_web_dir :/ sfProtoculousPlugin「。這是否意味着它沒有加載? –
那麼,你可以用'/ web/sfProtoculousPlugin'文件夾中的文件夾更新你的問題嗎?並檢查你是否看到裏面有'prototype.js'的'