Ошибка функции JavaScript (функция не определена) - PullRequest
0 голосов
/ 17 февраля 2012

Я написал функцию javascript (уже протестировал ее, и она работает) для файла на сервере разработки, и он работает просто отлично, я загрузил файл на рабочий сервер и при тестировании получаю следующую ошибку:

Opera Dragonfly говорит:

Uncaught exception: TypeError: Cannot convert 'App.system.ManageProductLines' to object

Firebug говорит:

App.system.ManageProductLines is undefined

Файлы абсолютно одинаковые (я проверил с WinMerge и не нашел различий), единственное отличие состоит в том,сервер, на котором они находятся.

Мой сервер разработки - это последняя версия Xampp для Windows, а рабочий сервер - это последняя версия Xampp для OpenSuse.

Кто-нибудь имеет какие-либо идеи?что происходит ??

Редактировать:

Предложено dtryon, вот пример кода:

В main.js

App.system.ManageProductLines = function()
{
     var init_row = function(row)
     {
          //function to add table row behavior
     }

     var reindex_odd_even_rows = function(table)
     {
           //function to reoder table when row is deleted
     }

 }

В индексе.tpl (шаблон Smarty):

{if $product_lines_url}
    <script type="text/javascript">
        App.system.ManageProductLines.init('manage_product_lines');
    </script>
{/if}

Если в шаблоне smarty действительно выполняется, так как в конечном HTML есть сценарий tage, однако на сервере dev функция найдена, а на рабочем сервере -не

Редактировать 2:

Благодаря Полу Батчеру, я думаю, что я все ближе к ответу, я попробовал следующее:

<script type="text/javascript">
$(document).ready(function()
{
    App.system.ManageProductLines.init('manage_product_lines');
});
</script>

Однако он все равно не загрузится, тогдаЯ попробовал это:

<script type="text/javascript">
$(document).ready(function()
{
         alert("Start document.ready");

         if(App.system.ManageProductLines.init)
         {
            alert("Method found");
            App.system.ManageProductLines.init('manage_product_lines');
         }
         else
         {
             alert("Method not found");
         }

         alert("End document.ready");
});

Согласно тому, что я написал, я должен получить следующие предупреждения:

"Start document.ready", "Method found" || "Method not found", "End document.ready"

Странная вещь, я только получаю "Начать документ.ready ", после этого кажется, что он просто перестает выполняться, и Opera Dragonfly и Firebug показывают ту же ошибку, что и раньше.

Ответы [ 2 ]

3 голосов
/ 17 февраля 2012

На момент достижения этой строки:

App.system.ManageProductLines.init('manage_product_lines');

Нет уверенности в том, что main.js был загружен или выполнен. Вам необходимо связать этот вызов с событием, которое произойдет только после загрузки всех сценариев.

Если вы используете один из них, большинство библиотек javascript предлагают такое событие (например, ready в jQuery). Если вы не используете его, то должно работать связывание с onload.

Одной из возможных причин различий между двумя средами может быть задержка в сети или нагрузка. Это особенно вероятно, если сервером разработки является localhost.

1 голос
/ 03 июля 2012

Я обнаружил проблему, проблема в том, что серверное приложение (activecollab 2) уже имело файл с точно таким же именем, который по какой-то причине всегда имел более высокий приоритет, чем мой файл, после обращения в службу поддержки AC единственный вариантдолжен был переписать их файл с моим.

...