2014-03-01 190 views
1

我有一個索引頁面,顯示有關不同系統的數據。我需要每2秒更新一次這個頁面。所以我調用jQuery ajax來調用控制器的一個方法,它使用請求的數據發送頁面的局部視圖。返回部分視圖的jQuery ajax

加載信息時,我有一個加載gif的用戶反饋。

我遇到的問題是ajax調用正在工作(頁面加載信息),但在進入控制器方法之前,首先觸發ajax錯誤。

索引頁

<div align="center" class="loader"> 
    <img src="@Url.Content("~/Images/loader.gif")"/> 
</div> 
<div id="reportsContent"> 

</div> 

jQuery的AJAX調用

var refreshInterval = @ViewBag.RefreshTime; 
setInterval(function() { GetData() }, refreshInterval); 

function GetData() { 
    $.ajax({ 
     type: "POST", 
     url: '@Url.Content("~/SystemReports/SystemReports")', 
     //url: '@Url.Action("SystemReports")', 
     dataType: "text", 
     data : {}, 
     success: function (data) { 
      $(".loader").hide(); 
      $('#reportsContent').html(data); 
     }, 
     error : function() { 
      alert('error'); 
     } 
    }); 
}; 

,因爲它顯示我曾經嘗試都@ Url.Action和@ Url.Content .. 我不知道爲什麼首先顯示警報('錯誤'),並且只有在頁面正確加載所需數據後纔會顯示。

控制器

[HttpPost] 
public PartialViewResult SystemReports() 
{ 
    DataService.GetStatusData(); 

    SystemModel model = new SystemModel(); 
    Map(data, model); 

    return PartialView("_ReportsContent", model); 
} 

我不知道爲什麼被觸發的錯誤和$就仍然有效。也許有人可以幫助我?

+1

error:function(xhr,status,error){alert(xhr.responseText); }在你的$ .ajax調用中實現這一點代碼來檢查你給出的錯誤是什麼。 – user1534664

+0

responseText爲空。 –

+1

這可能是由於您的網址不正確而導致的。 – user1534664

回答

2

錯誤是你不能在你的jQuery ajax API中使用ASP.NET代碼。替換網址:

url: '/SystemReports/SystemReports' 

這會現在工作!您需要在通過jQuery發送Ajax請求時使用JavaScript API,而不是使用服務器端類,例如:Url等。它們不會在jQuery中工作,因爲它們在jQuery庫中沒有引用它們。

爲了更精確有關錯誤,你可以用它來了解實際的錯誤:

error: function(xhr, status, error) { 
    alert(xhr.responseText); 
} 

這將提醒被拋出的錯誤,也許這將是一個404(未找到) 。

+0

我一直在使用@Url之前與ajax調用,他們的工作。如果我在ip:port/virtualdirectory /上發佈我的應用會發生什麼...... 會ulr:'/ SystemReports/SystemReports'仍然工作? –

+1

@MihaiTibrea http://stackoverflow.com/questions/12514745/asp-net-mvc-url-action-in-jquery-is-not-recognized – user1534664

+0

我知道這一點,但現在我的腳本是在視圖內。一旦我完成了它,我將把它移動到一個單獨的JS文件中,並在視圖中創建一個JS變量。 –