【问题标题】:Ajax is not defined error with symfony 1.4 and sfProtoculousPluginsymfony 1.4 和 sfProtoculousPlugin 未定义 Ajax 错误
【发布时间】:2012-06-05 07:12:23
【问题描述】:

我这几天一直在尝试解决这个问题。有经验的人可以看一下并告诉我我做错了什么。

这是 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 脚本)复制到我的 /web 文件夹。好像有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

另外,我没有看到带有prototype.js&lt;script&gt; 标签。


已解决

将此添加到应用程序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 的帮助。

【问题讨论】:

    标签: ajax autocomplete symfony-1.4


    【解决方案1】:

    第一步,清理所有东西,然后重新运行发布

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

    然后,检查你的 web 文件夹,里面是否有一个文件夹 sfProtoculousPlugin,有一个 cssjs 文件夹?

    在Firebug中查看network tab时,是否有js标记为404?

    prototype.js 是否加载良好?

    【讨论】:

    • 嘿j0k。我清除了缓存并运行了 plugin:publish-assets。里面有一个文件夹,里面有 css 和 js 文件夹以及它们各自的内容。在 Firebug 的 Net 选项卡下,我没有看到任何标记为 404 的 js。当我查看页面源并搜索原型时,我在此处找到它“javascripts:/sfProtoculousPlugin/js/prototype:{}”和此处“sf_prototype_web_dir : /sfProtoculousPlugin"。这是否意味着它没有加载?
    • 好吧,您能用/web/sfProtoculousPlugin 文件夹中的文件夹更新您的问题吗?并检查你是否看到了一个&lt;script&gt; 标签,里面有prototype.js
    • 如果我在view.yml 中声明javascripts: [%SF_PROTOTYPE_WEB_DIR%/js/prototype],则&lt;script&gt; 标记存在于&lt;head&gt; 标记中,其中prototype.js 内部。但是,它也会导致Ajax.Autocompleter is not a constructor 错误,因为现在包含两次 js 库。请帮忙。
    • 所以这是因为 prototype 已经加载。删除该行并检查是否加载了原型和脚本库。
    【解决方案2】:

    将此添加到我的模板顶部:

        <?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 的帮助。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-07-10
      • 2011-02-04
      • 1970-01-01
      • 1970-01-01
      • 2020-12-14
      相关资源
      最近更新 更多