2009-06-23 93 views
6

我收到了一個「Microsoft JScript運行時錯誤:'當我嘗試AJAX調用時,'我的未定義'錯誤在我的一個MVC應用程序的頁面上。 AJAX調用是通過嵌入多個頁面的局部視圖進行的。它可以在除了一頁以外的所有頁面上正常工作。我已經閱讀指向web.config文件設置和.axd映射作爲可能解決方案的文章,但應用程序已在web.config中正確配置,並且.axd映射在IIS中也是正確的。另外,它可以在所有使用這個局部視圖的頁面上正常工作,除了一個。它的行爲像AJAX庫不加載這一頁。ASP.NET MVC AJAX系統未定義錯誤

對腳本文件的引用位於共享site.master文件中。所有頁面(包括不工作的頁面)都引用相同的主頁面。

任何想法?現在我一直在爲此工作兩天。謝謝。

編輯:正如Sam指出的那樣,在AJAX庫有機會加載之前,似乎AJAX調用正在觸發。但是,AJAX調用是在頁面渲染很久之後由提交按鈕觸發的,因此AJAX庫有足夠的時間來加載 - 抱歉,由於第一次沒有提供足夠的信息。

回答

3

在Firefox中加載頁面,然後使用Firebug檢查頁面 - 您將能夠看到所有已加載的單個腳本,以及發出的所有網絡請求以及它們是否成功。這比從服務器的角度進行故障排除要好。

如果您使用IE8,您可以使用開發工具窗口,但我認爲Firebug更好 - 兩種工具都支持JavaScript調試。

最可能的問題是,您在部分視圖中運行腳本,然後它所依賴的腳本有機會加載 - 請確保您的部分視圖內部的任何腳本調用只會在頁面運行已經加載,而不是在加載時立即。

+0

@Sam - I已經看過Firebug,可以看到兩個Ajax庫都在我點擊腳本標籤時加載。雖然我不熟悉螢火蟲,但我可能會錯過一些東西。我已經使用過很多提琴手,所以明天當我到辦公室來驗證腳本的調用沒有失敗時,我會看看它。由於ajax調用是在頁面渲染很久之後從提交按鈕觸發的,因此我會排除腳本沒有機會加載。謝謝。 – cnaegle 2009-06-24 03:14:29

+0

@Sam - 今天早上和Fiddler一起看了一下,猜猜看是什麼?只有該頁面的腳本文件路徑不正確。不知道爲什麼,但是當我爲腳本設置完全合格的路徑時,該頁面完美地工作。謝謝,我將你的答案標記爲正確,因爲它讓我走上了正確的道路 - 使用一個工具,告訴我我兩天前需要知道的內容:) – cnaegle 2009-06-24 14:10:20

0

添加在部分web.cofig:

<remove verb="*" path="*.asmx"/> 

<add verb="*" path="*.asmx" validate="false" type="System.Web.Script.Services.ScriptHandlerFactory, System.Web.Extensions, Version=1.0.61025.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"/> 

<add verb="*" path="*_AppService.axd" validate="false" type="System.Web.Script.Services.ScriptHandlerFactory, System.Web.Extensions, Version=1.0.61025.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"/> 

<add verb="GET,HEAD" path="ScriptResource.axd" type="System.Web.Handlers.ScriptResourceHandler, System.Web.Extensions, Version=1.0.61025.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" validate="false"/> 

<add name="ScriptModule" type="System.Web.Handlers.ScriptModule, System.Web.Extensions, Version=1.0.61025.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"/> 

+0

如上所述,web.config文件已正確配置。 – cnaegle 2009-06-24 13:03:12

16

萬一......使用以下方法來避免路徑問題

<script src="<%= Url.Content("~/Scripts/MicrosoftAjax.debug.js") %>" 
    type="text/javascript"></script> 
<script src="<%= Url.Content("~/Scripts/MicrosoftMvcAjax.debug.js") %>" 
    type="text/javascript"></script> 

來源:http://msdn.microsoft.com/en-us/library/dd381533.aspx

感謝, 附庸風雅

+1

這似乎是人們應該檢查的第一件事 - 不管它們是否包含MicrosoftAjax.js和MicrosoftMvcAjax.js文件 – 2012-08-30 18:15:46

0

關於你的迴應山姆,有一件事我已經在很多MVC應用程序注意到的是,人們不知道該如何處理有相對路徑和應用程序/運行時的歧義。例如,URL重寫幾乎可以保證特定頁面可以出現在不同於您預期的深度,因此../../images將指向其他地方,具體取決於您是在查看/products/widget還是/products/widget/12345,即使視圖可能相同。正如Arty指出的那樣,處理這個問題的最好方法是讓引擎通過使用URL實用程序和應用程序相關路徑來爲您完成工作,而這些路徑將由應用程序進行修改,而與上下文無關。

0

我也發現,使用下面的作品與ASP.NET MVC2。

而不是使用MicrosoftMvcAjax.js的,你用MicrosoftMvcValidation.js

希望這可以幫助別人。

2

以上所有情況都可以。但有時候開發者忘記爲ajax添加javascript文件。所以請檢查一下。

16

web.config添加以下代碼行下appsettings標籤:

<add key="UnobtrusiveJavaScriptEnabled" value="true" /> 
0

基本上,你可能會丟失:MicrosoftMvcAjax.MicrosoftMvcValidation.debugMicrosoftMvcValidation JS文件的引用。

執行以下步驟:

  1. PM> Install-Package MicrosoftAjax

  2. PM> Install-Package MicrosoftMvcAjax.Mvc5

  3. 包括他們在bundleconfig象下面這樣:

    bundles.Add(new ScriptBundle("~/bundles/mvcFoolProof") 
         .Include("~/Scripts/MicrosoftAjax*", 
           "~/Scripts/MicrosoftMvcAjax*", 
           "~/Scripts/MicrosoftMvcValidation*", 
           "~/Scripts/mvcfoolproof*", 
           "~/Scripts/MvcFoolproofJQueryValidation*", 
           "~/Scripts/MvcFoolproofValidation*")); 
    

現在它應該沒有任何錯誤的工作。