2011-10-25 32 views
5

Điều này hoạt động trên máy tính của tôi, nhưng không hoạt động trên máy chủ sản xuất. Tôi đang cố gắng để cập nhật một số divs với ajax, nhưng họ không được cập nhật, mặc dù các bộ phận khác làm việc tốt. Tôi đang sử dụng IIS 6 trên máy chủ. Khi tôi gỡ lỗi mã này ở phía máy chủ bằng firebug, nó không nhấn bất kỳ điểm ngắt nào tôi thêm vào hàm thành công.Chức năng thành công AJAX trên máy chủ

Script:

function updateServiceInfo(nodeId) { 
     var id = { id: nodeId }; 
     $.ajax({ 
      url: '/ServiceInfo/ServiceInfoPartial', 
      type: 'GET', 
      data: id, 
      dataType: 'html', 
      success: function (data) { 
       $('#serviceInfoContent').html(data); 
      }, 
    error: function (request, error) { 

    } 
     }); 
    } 

Bộ điều khiển:

public class ServiceInfoController : Controller 
    { 
     public ActionResult ServiceInfo() 
     { 
      return PartialView("ServiceInfo"); 
     } 

     public ActionResult ServiceInfoPartial(string id) 
     { 
      return PartialView("ServiceInfoPartial"); 
     } 
    } 

Xem:

serviceinfopartial

@model string 
<p> 
    Немає опису</p> 

serviceinfo

<div id="serviceInfo"> 
    <div id="ContainerPanel" class="ContainerPanel"> 
     <div id="serviceInfoHeader" class="collapsePanelHeader"> 
      <div id="dvHeaderText" class="HeaderContent"> 
       Опис сервісу</div> 
      <div id="dvArrow" class="ArrowClose"> 
      </div> 
     </div> 
     <div id="serviceInfoContent" class="serviceInfoContent"> 

     </div> 
    </div> 
</div> 

Câu trả lời được trả về trong giao diện điều khiển là

GET http://localhost/Managers/GetManagers?nodeId=563344 404 Not Found 42ms 

Trả lời

12

Ahhhhhhhhhhhhhh, một url hardcoded:

url: '/ServiceInfo/ServiceInfoPartial', 

Never url hardcode như thế này trong một ứng dụng ASP.NET MVC.

Luôn giúp việc sử dụng url để tạo ra chúng:

url: '@Url.Action("ServiceInfoPartial", "ServiceInfo")', 

hoặc nếu điều này là trong một tập tin javascript riêng biệt, nơi bạn không thể sử dụng những người giúp đỡ url chỉ cần sử dụng HTML5 đĩa dữ liệu * thuộc tính trên một số phần tử DOM:

<div id="serviceInfo" data-url="@Url.Action("ServiceInfoPartial", "ServiceInfo")"> 
... 
</div> 

và sau đó trong javascript của bạn chỉ đơn giản là:

url: $('#serviceInfo').data('url'), 

Lý do mã của bạn không hoạt động khi bạn lưu trữ nó trong IIS là bởi vì trong IIS bạn có thể lưu trữ ứng dụng của bạn trong một thư mục ảo để url chính xác không còn là /ServiceInfo/ServiceInfoPartial nhưng là /YourAppName/ServiceInfo/ServiceInfoPartial. Đó là lý do tại sao bạn không bao giờ nên mã hóa bất kỳ url nào và sử dụng những người trợ giúp để tạo chúng => đó là vì những người trợ giúp xử lý các trường hợp này. Một lợi ích khác của việc sử dụng trợ giúp là nếu sau này bạn quyết định thay đổi bố cục tuyến đường của mình trong Global.asax, bạn sẽ không cần sửa đổi tất cả các tệp javascript của mình, v.v ... Quản lý url của bạn được tập trung ở một vị trí duy nhất.

+0

Có, mã javasript của tôi nằm trong tệp riêng. và url: '@ Url.Action ("ServiceInfoPartial", "ServiceInfo")', không hoạt động. Và htis HTML5 atrribute sẽ hoạt động trong ví dụ ie7? –

+0

@andronz, có nó sẽ hoạt động trong IE7. Đó là những gì ASP.NET MVC 3 unobtrusive khách hàng xác nhận và AJAX đã sử dụng. Ngay cả khi IE7 là crap và không hỗ trợ HTML5, jquery sẽ vui vẻ giải thích các thuộc tính đó được nối thêm vào các phần tử DOM. Và kể từ khi IE7 chưa bao giờ nghe nói về các thuộc tính của HTML5 hoặc dữ liệu, nó sẽ tự động bỏ qua chúng. –

+0

@DarinDimitrov, về những gì bạn đã viết trên tệp js riêng biệt 1. Tại sao bạn lưu url trong div chứ không phải là trường ẩn? 2. Nếu bạn làm như vậy javascript được kết hợp với khung nhìn, phải không? – gdoron

0

này làm việc cho tôi, nhưng chỉ được thử nghiệm trong Chrome 53:

Tạo một số biến phạm vi toàn cầu trong file .cshtml bạn, chỉ cần lưu tâm về các vấn đề phạm vi và cung cấp cho các biến của bạn tên duy nhất.

<script> 
    globalUrl = '@Url.Action("ServiceInfoPartial", "ServiceInfo")'; 
</script> 

Sau đó tham khảo tập tin js của bạn ...

<script type="text/javascript" src="yourJsFile.js"></script> 

Bên yourJsFile của bạn.js:

url: globalUrl, 
Các vấn đề liên quan