2013-06-18 27 views
5

Tôi đang cố gắng sử dụng jQuery để kích hoạt cuộc gọi Ajax sau khi nhấp vào một nút nhất định. Tôi đã đọc một số ví dụ về cú pháp và các vấn đề có thể gặp phải, nhưng không tìm được giải pháp làm việc cho mục đích của tôi. Đây là mã.jQuery Ajax không gọi tới phương thức điều khiển MVC 4

điều khiển Phương pháp: (HomeController.cs)

[HttpPost] 
    public JsonResult ChangeCompany(string companyCode) 
    { 
     return Json(new { result = companyCode }, JsonRequestBehavior.AllowGet); 
    } 

jQuery Mã số:

function changeCompany(company) { 
    $.ajax({ 
     url: '@Url.Action("ChangeCompany", "Home")', 
     type: 'POST', 
     data: JSON.stringify({ companyCode: company }), 

     success: function (data) { 
      alert("Company: " + data); 
     }, 
     error: function (req, status, error) { 
      alert("R: " + req + " S: " + status + " E: " + error); 
     } 
    }); 
} 

Và cuối cùng, tôi gọi chức năng này với:

$('.companyButton').click(function() { 
    compCode = $(this).text(); 
    debug("Click event --> " + $(this).text()); 
    changeCompany(compCode); 
}); 

nhắn debug của tôi hiển thị đúng cách và cuộc gọi Ajax liên tục không thành công với cảnh báo sau: R: [object Object] S: error E: Not Found

Tôi không hoàn toàn chắc chắn nên làm gì với điều đó.

Tôi biết có một số câu hỏi về chủ đề này, nhưng không có câu hỏi nào trong số này dường như giải quyết được vấn đề của tôi và tôi thành thật không chắc chắn có gì sai với các khối mã này. Bất kỳ cái nhìn sâu sắc sẽ được đánh giá cao.

EDIT: Trong trường hợp đáng chú ý, điều này là dành cho thiết bị di động. Thử nghiệm trên Trình giả lập điện thoại Windows 8 (Internet Explorer), cùng với jQuery Mobile. Không chắc liệu điều đó có ảnh hưởng đến Ajax ở tất cả

CHỈNH SỬA 2: Sau khi xem cuộc gọi mạng thô, có vẻ như 'Url.Action("ChangeCompany", "Home")' không được chuyển đổi thành URL thích hợp và thay vào đó được gọi trực tiếp như thể đó là URL thô bản văn. Đây có phải là do jQuery đã lỗi thời hay một số yếu tố khác không?

+0

Phương thức Hành động điều khiển của bạn trông như thế nào? Ngoài ra, hãy xem cuộc gọi mạng thô trong công cụ trình duyệt của bạn và xem chính xác cuộc gọi là gì - điều đó sẽ giúp khắc phục sự cố. –

+0

Tôi nghĩ rằng đó là một lỗi phía máy chủ. Bạn có thể kiểm tra phần Mạng thanh công cụ Dev của Chrome khi bạn nhấp vào yêu cầu bạn có thể thấy phản hồi trong tab Xem trước hay không. –

+0

Nếu bạn nhìn vào nguồn trong trình duyệt của mình, url có đúng không? Và nếu bạn đặt một trình gỡ rối ';' bên trong hàm lỗi, hãy xem xét kỹ hơn các tham số. –

Trả lời

6

Ok với EDIT2 của bạn có vẻ như bạn đang sử dụng url: '@Url.Action("ChangeCompany", "Home")', trong một tệp JavaScript riêng biệt. bạn chỉ có thể viết mã dao cạo bên trong tệp .cshtml và nó không hoạt động bên trong tệp .js

+0

Ah, điều đó có ý nghĩa. Không chắc tại sao tôi nghĩ tôi có thể sử dụng nó bên ngoài tầm nhìn. – DrBowe

+0

Đã đi trước và mã hóa cứng URL vào cuộc gọi Ajax và nó hoạt động tốt ngay bây giờ, cảm ơn cho việc bắt! – DrBowe

+0

bạn có thể tạo một biến trong .cshtml với url và truy cập nó trong tệp .js –

1

Bạn đang thiếu một số thông số quan trọng trong cuộc gọi AJAX của mình. Thay đổi cuộc gọi AJAX của bạn như sau:

function changeCompany(company) { 
    $.ajax({ 
       url: '@Url.Action("ChangeCompany", "Home")', 
       type: 'POST', 
       data: JSON.stringify({ companyCode: company }), 
       success: function (data) { 
         alert("Company: " + data); 
         }, 
      error: function (req, status, error) { 
         alert("R: " + req + " S: " + status + " E: " + error); 
         } 
      });} 

Sau đó, bạn có thể chú thích phương pháp điều khiển của mình với thuộc tính [HttpPost] như sau;

[HttpPost] 
public JsonResult ChangeCompany(string companyCode) 
{ 
    return Json(new { result = companyCode }, JsonRequestBehavior.AllowGet); 
} 
+0

Tôi đã làm như sau và nhận được cảnh báo lỗi tương tự. Không chắc chắn vấn đề là gì. – DrBowe

0

Lưu ý rằng hành động của bạn không trả lại trực tiếp companyCode. Bạn đang gán nó vào Json result tài sản do đó Trong chức năng thành công của bạn để hiển thị kết quả bạn cần phải có:

success: function (data) 
    { 
    alert("Company: " + data.result); 
    } 

Ngoài này: E: Not Found nói với tôi rằng bạn có thể có một số vấn đề định tuyến. Nếu bạn đặt điểm ngắt bên trong hành động ChangeCompany của mình, nó có bị tấn công không?

Các vấn đề liên quan