2015-11-30 102 views
2

我試圖將單個參數傳遞給我的代碼。我正在達到ajax的成功結束,但後面的aspx.cs代碼中的方法沒有被調用。如果它有所作爲,我正在使用masterfile。Ajax調用ASP.NET WebMethod沒有打到服務器端方法

的Javascript:

$(document).ready(function() { 
    var someID = ""; 
    $('.glyphicon-trash').click(function() { 
     $.ajax({ 
      type: "POST", 
      url: "fileName.aspx/deleteSomething", 
      data: "{'deleteSomeID':'" + someID + "'}", // someID is assigned to a value by another button 
      contentType: "application/json; charset=utf-8", 
      dataType: "json", 
      success: function (msg) { 
       alert("success"); // this alert works. 
      } 
     }); 
    }); 
}); 

fileName.aspx.cs:

protected void Page_Load(object sender, EventArgs e) 
{ 
    //... stuff here 
} 

[WebMethod] 
public static void deleteSomething(string deleteSomeID) 
{ 
    MySqlDbUtilities db = new MySqlDbUtilities(); 
    MySqlCommand cmd; 
    string sql = "DELETE FROM Targets WHERE targetID = @someID"; 
    cmd = db.GetCommand(sql); 

    cmd.Parameters.AddWithValue("@someID", deleteSomeID); 

    cmd.ExecuteNonQuery(); 
    db.Dispose(); 
} 

當你點擊頁面上的按鈕 「someID」 被填滿。這是正常工作,我三重檢查。然而這個方法沒有做任何事情。我不知道它是否到達。有任何想法嗎?

+2

將斷點的方法的簽名,看它是否被擊中或不 –

+0

@cFrozenDeath我把一個斷點方法簽名和它沒有被擊中。那很有意思。 – user3044394

+1

你在瀏覽器的控制檯看到任何錯誤嗎? (F12) – zed

回答

1

不要手工打造的data參數,而不是通過使用JSON.stringify作出正確的編碼:

$.ajax({ 
    type: "POST", 
    url: "fileName.aspx/deleteSomething", 
    data: JSON.stringify({ deleteSomeID: someID }), 
    contentType: "application/json; charset=utf-8", 
    dataType: "json", 
    success: function (response) { 
     alert("success"); 
    } 
}); 

而且,你可以處理你的查詢可能拋出異常的場景,並在你的用戶界面中採取相應的行動,這是一個非常簡單的方法:

[WebMethod] 
public static string deleteSomething(string deleteSomeID) 
{ 
    try { 
     MySqlDbUtilities db = new MySqlDbUtilities(); 
     MySqlCommand cmd; 
     string sql = "DELETE FROM Targets WHERE targetID = @someID"; 
     cmd = db.GetCommand(sql); 

     cmd.Parameters.AddWithValue("@someID", deleteSomeID); 

     cmd.ExecuteNonQuery(); 
     db.Dispose(); 
    } 
    catch (Exception e) { 
     return e.Message; 
    } 

    return "1"; 
} 

然後,管理的成功回調的響應:

$.ajax({ 
    type: "POST", 
    url: "fileName.aspx/deleteSomething", 
    data: JSON.stringify({ deleteSomeID: someID }), 
    contentType: "application/json; charset=utf-8", 
    dataType: "json", 
    success: function (response) { 
     if (response == "1") { 
      alert("Successful deletion"); 
     } else { 
      alert("Operation failed! Details: " + response); 
     } 
    } 
}); 
1

您的數據:param看起來不對我。你不需要它是一個字符串。

更新:你說你打成功處理程序 - 只是爲了完整性,你可以添加這個錯誤處理程序,並再次檢查它沒有打?

$(document).ready(function() { 
var someID = ""; 
     $('.glyphicon-trash').click(function() { 
      $.ajax({ 
       type: "POST", 
       url: "fileName.aspx/deleteSomething", 
       data: { deleteSomeID: someID }, 
       contentType: "application/json; charset=utf-8", 
       dataType: "json", 
       success: function (msg) { 
        alert("success"); // this alert works. 
       }, 
       error: function (xhr, status, text) { 
        console.log(xhr.status); 
        console.log(xhr.text); 
        console.log(xhr.responseText); 
       } 
      }); 
     }); 

我更習慣於MVC,所以我不能保證JsonResult在webforms中工作(如果沒有,我會感到驚訝)。

更改您的webmethod以返回JsonResult。

在你的代碼中,聲明一個bool設置爲false,並在你的SQL執行後將其設置爲true。返回如下:

JsonResult returnObj = new JsonResult 
     { 
      Data = new 
      { 
       wasSuccessful = myBool, 
      }, 
      ContentEncoding = System.Text.Encoding.UTF8, 
      JsonRequestBehavior = JsonRequestBehavior.DenyGet 
     }; 

     return Json(returnObj); 

更改您的成功處理程序:

success: function (data) { 
      console.log(data); 
      alert(data.wasSuccessful); 
     } 
+0

我不認爲它會在沒有字符串的情況下工作。謝謝。但是,它仍然給我同樣的問題。 +1反正 – user3044394

+0

我在添加錯誤處理後仍然成功。 – user3044394

+0

@ user3044394當您的方法返回** void **時,您在成功函數中收到「msg」。你應該在你的函數中返回其他東西,或者從AJAX調用中移除「msg」 –

相關問題