-1

開発サーバーのファイルにjavascript関数を書きました(すでにテスト済みで動作します)。問題なく動作します。ファイルを本番サーバーにアップロードし、テストすると次のエラーが発生します。

オペラトンボ 言います:

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

Firebug さんのコメント:

App.system.ManageProductLines is undefined

ファイルはまったく同じです (WinMerge で確認しましたが、違いは見つかりませんでした)。唯一の違いは、ファイルが置かれているサーバーです。

私の開発サーバーは Windows 上の Xampp の最新バージョンであり、運用サーバーは OpenSuse 上の Xampp の最新バージョンです。

誰が何が起こっているのか分かりませんか??

編集:

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
     }

 }

index.tpl (Smarty テンプレート):

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

最終的な HTML にはスクリプト タグが含まれているため、smarty テンプレートの if は実際に実行されていますが、開発サーバーでは関数が見つかりますが、運用サーバーでは見つかりません。

編集2:

Paul Butcher のおかげで、答えに近づいていると思います。次のことを試しました。

<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"

奇妙なことに、「Start document.ready」しか表示されず、その後実行が停止したように見え、Opera Dragonfly と Firebug の両方で以前と同じエラーが表示されます。

4

2 に答える 2

2

この行に達した時点で:

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

main.js がロードまたは実行されているという確実性はありません。すべてのスクリプトがロードされた後にのみ発生するイベントにその呼び出しをバインドする必要があります。

使用している場合、ほとんどの JavaScript ライブラリはそのようなイベントを提供します ( readyjQuery など)。使用していない場合は、onload へのバインドが機能するはずです。

2 つの環境の違いの考えられる理由の 1 つは、ネットワークの遅延または負荷である可能性があります。これは、開発サーバーが localhost の場合に特に発生する可能性があります。

于 2012-02-17T18:30:48.983 に答える
1

私は問題を発見しました。問題は、サーバー アプリケーション (activecollab 2) にまったく同じ名前のファイルが既にあり、何らかの理由で常に私のファイルよりも高い優先度を保持していたことです。AC サポートに連絡した後、唯一のオプションは上書きすることでした。彼らのファイルは私のものです。

于 2012-07-03T16:08:19.997 に答える