2013-03-05 80 views
0

當我運行bttn click event以下的代碼時doesn't return a data for success method. 但它適用於控制器方法並返回false(布爾值)作爲輸出。我需要從javascript代碼中選擇該布爾值。成功的方法不會在Ajax調用上觸發

爲什麼它不起作用?

Javascript代碼是如下:

$('#btnClockInTime').off('click').on('click', function() { 

       var isClockOutTimeCompleted = true; 

       $.ajax({ 
        url: "/Employees/IsClockOutTimeCompleted", 
        type: "GET", 
        dataType: "json", 
        cache: false, 
        data: { employeeId: employeeId }, 
        success: function (data) { 
         if (!data) { 
          isClockOutTimeCompleted = data; 
         } 
        }, 
        error: function (xhr, ajaxOptions, thrownError) { 
         alert(xhr.status); 
         alert(thrownError); 
        } 
       }); 

       return false; 
      }); 

控制器的操作方法是如下:

[HttpGet] 
public JsonResult IsClockOutTimeCompleted(Guid employeeId) 
     { 
      var clockingDate = Convert.ToDateTime(DateTime.Today); 

      var isClockOutTimeCompleted = Repository.IsClockOutTimeCompleted(employeeId, clockingDate); 

      return Json(isClockOutTimeCompleted, JsonRequestBehavior.AllowGet); 
     } 

庫代碼是如下:

public bool IsClockOutTimeCompleted(Guid employeeId, DateTime clockingDate) 
     { 
      var clockOutTime = (from c in Catalog.EmployeeClockInOutTimes 
           where (c.Employee.Id == employeeId && c.Created == clockingDate && c.ClockOut == null) 
           select c).FirstOrDefault(); 

      return clockOutTime == null; 
     } 

UPDATE:

響應是如下:

enter image description here

更新2:

屏幕1:

enter image description here

屏幕2:

enter image description here

屏幕3:

enter image description here

如上我的調試不進入成功方法圖像中示出。 第二個屏幕(當在error處進行調試)後,它將進入控制器並帶來數據。 第三個屏幕顯示從控制器返回後的狀態。任何想法?

+0

是否因爲您未執行請求作爲帖子? – 2013-03-05 09:18:22

+0

在控制檯中的任何錯誤? – Jai 2013-03-05 09:18:37

+0

'if(!data)'這意味着被檢查的值是布爾值。數據是布爾值嗎? – Aashray 2013-03-05 09:18:38

回答

0

我會想,如果你返回值是剛剛false作爲一個字符串,它就會成爲你data值,結果:

if (!data) { // won't fire } 

由於達林說,如果你包你的迴應Json在一個對象內,然後用它來分配你的isClockOutTimeCompleted變量。

如果是真/假返回類型,我不會想到你會對你的返回值進行布爾評估,難道你不想只將它分配給isClockOutTimeCompleted兩種方式嗎?

+0

不幸的''false''字符串被正確解析爲'false'。因此'if(!data)'應該觸發得很好。問題在更深層的地方。 – freakish 2013-03-05 10:09:53

+0

我在想更多的是,如果你的方法是爲了返回t/f關於時鐘超時,你會關心,如果它是t/f時返回?你不會只是想分配它嗎? – dougajmcdonald 2013-03-05 10:14:16

0

如果烏拉圭回合發佈數據到控制器的方法始終使用

'type':'POST' in ur ajax call & 
change the [HTTPget] attribute from ur controller method to [httpPost] 
下面

是我的示例代碼工作正常

$.ajax({ 
      url: 'Home/temp', 
      type: 'POST', 
      dataType: "json", 
      data: {'name':'surya'}, 
      success: function (data) { 
       console.log(data); 
      //here i'm getting the data which i have passed 

      }, 
      error: function() { 
       console.log("inside error") 
      } 
     }); 

和我的控制器代碼

[HttpPost] 
     public JsonResult temp(string name) { 

      return Json(name); 
     } 

我是找回我通過jquery ajax傳遞給控制器​​方法的數據..

可能應該改變你的'IsClockOutTimeCompleted'方法,其中你正在執行LINQ queries.just驗證你的LINQ查詢once..and也是employeeId你傳遞到控制器的類型是integer,然後代替GUID作爲參數爲什麼不更改參數類型爲int並參見..

關注