2012-06-05 47 views
0

我一直在試圖找出這幾天現在。有人能夠更有經驗地看看我是否做錯了。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的幫助。

回答

0

將此添加到我的模板的頂部:

<?php use_helper('Javascript') ?> 

將此添加到應用程序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的幫助。

0

第一步,清潔的每一件事,然後重新運行發佈

./symfony cc 
./symfony plugin:publish-assets 

然後,檢查您的網絡文件夾,有一個文件夾裏面sfProtoculousPlugin,具有cssjs文件夾?

當您在Firebug中檢查網絡選項卡時,是否有任何標記爲404的js?

請問prototype.js裝得好嗎?

+0

嘿j0k。我清除了緩存並運行了插件:publish-assets。裏面有一個文件夾和css和js文件夾以及它們各自的內容。在Firebug的Net標籤下,我沒有看到任何標記爲404的js。當我查看頁面源並搜索原型時,我在這裏找到它「javascripts:/ sfProtoculousPlugin/js/prototype:{}」,這裏是「sf_prototype_web_dir :/ sfProtoculousPlugin「。這是否意味着它沒有加載? –

+0

那麼,你可以用'/ web/sfProtoculousPlugin'文件夾中的文件夾更新你的問題嗎?並檢查你是否看到裏面有'prototype.js'的'

  • 11. AJAX錯誤「setRequestHeader」沒有定義
  • 12. Symfony 1.4與ProxyPass和ProxyPassReverse
  • 13. php symfony 1.4自定義驗證程序錯誤
  • 14. Symfony 1.4:CSRF格式的自定義錯誤消息
  • 15. 問題與使用symfony 1.4的ajax
  • 16. Wordpress前端Ajax與wp_localize_script錯誤:ajaxurl沒有定義
  • 17. Symfony 1.4和Jenkins?
  • 18. 自定義錯誤symfony
  • 19. 錯誤 - easeInBounce沒有定義
  • 20. 用symfony 1.4自定義路由
  • 21. Symfony 1.4 sfWidgetFormInputFile可編輯自定義
  • 22. JS和Quicktime - 「沒有定義QT_WriteOBJECT」錯誤
  • 23. 錯誤:'jQuery沒有定義'
  • 24. 類沒有錯誤沒有定義
  • 25. Symfony 1.4錯誤的URL路由
  • 26. Symfony的1.4驗證錯誤無符號
  • 27. Symfony 1.4擴展模型錯誤
  • 28. Symfony的1.4行走:我確定,但外鍵沒有在表中定義
  • 29. PHPUnitTest沒有給出symfony 1.4的結果
  • 30. Symfony 1.4 linkToDeleteMenu確認沒有javascript