2017-09-15 113 views
2

下面是我的網頁形式的WebMethod這是返回數據的列表,它工作正常:阿賈克斯成功功能無法接收數據

[WebMethod] 
public static List<SalesInvoiceFinalCalculationEntity> salesInvoiceFinalCalculaiton(string InvoiceNo) 
{ 
    List<SalesInvoiceFinalCalculationEntity> list = new List<SalesInvoiceFinalCalculationEntity>(); 
    list = SalesInvoiceManager1.salesInvoiceFinalCalculaiton(InvoiceNo); 
    return list; 
} 

但在下面的Ajax功能,我無法檢索數據。當我在ajax成功函數中將數據綁定到文本框時,它會在Html文本框中顯示未定義的文本。

function salesInvoiceFinalCalculaiton() {   

    var InvoiceNo = $("#txt_InvoiceNo").val(); 
    $.ajax({ 
     async: false, 
     type: "POST", 
     contentType: "application/json; charset=utf-8", 
     url: "/AjaxRequestToServer.aspx/salesInvoiceFinalCalculaiton", //URI 
     data: "{InvoiceNo:'" + InvoiceNo + "'}", 
     dataType: "json", 
     success: function (data) { 

      document.getElementById("txtinvoicevalue").value=(data.totalprice); 
      document.getElementById("txtTotalDiscount").value = data.discountamt; 
      document.getElementById("txtTotalTaxableValue").value = data.taxableamt; 
      document.getElementById("txtTotalCGST").value = data.cgstamt; 
      document.getElementById("txtTotalSGST").value = data.sgstamt; 
      document.getElementById("txtGrandTotal").value = data.grandtotal; 

     }, 
     error: function (xhr) { 
      if (xhr.statusText == "Invalid Request") { 
       sessionStorage.clear(); 
      } 
     } 
    }); 
} 

下面是數據層和存儲過程:

public static List<SalesInvoiceFinalCalculationEntity> salesInvoiceFinalCalculaiton(string InvoiceNo) 
     { 
      try 
      { 


       List<SalesInvoiceFinalCalculationEntity> SalesInvoiceFinalCalculation = new List<SalesInvoiceFinalCalculationEntity>(); 

       DataSet ds = SqlHelper.ExecuteDataset(Util.ConnectionString, CommandType.StoredProcedure, "sp_salesInvoiceFinalCalculaiton", 
        new SqlParameter("@InvoiceNo", InvoiceNo)); 

       foreach (DataRow dr in ds.Tables[0].Rows) 
       { 
        SalesInvoiceFinalCalculationEntity list = new SalesInvoiceFinalCalculationEntity(dr); 
        SalesInvoiceFinalCalculation.Add(list); 
       } 
       return SalesInvoiceFinalCalculation; 
      } 
      catch (Exception ex) 
      { 
       throw ex; 
      } 
     } 

這是我的實體類:

public class SalesInvoiceFinalCalculationEntity 
    { 
     public int InvoiceNo { get; set; } 
     float totalprice { get; set; } 
     float discountamt { get; set; } 
     float taxableamt { get; set; } 
     float cgstamt { get; set; } 
     float sgstamt { get; set; } 
     float grandtotal { get; set; } 
     public SalesInvoiceFinalCalculationEntity() { } 
     public SalesInvoiceFinalCalculationEntity(DataRow dr) 
     { 
      InvoiceNo = Convert.ToInt32(dr["InvoiceNo"]); 
      totalprice = float.Parse(dr["totalprice"].ToString()); 
      discountamt = float.Parse(dr["discountamt"].ToString()); 
      taxableamt = float.Parse(dr["taxableamt"].ToString()); 
      cgstamt = float.Parse(dr["cgstamt"].ToString()); 
      sgstamt = float.Parse(dr["sgstamt"].ToString()); 
      grandtotal = float.Parse(dr["grandtotal"].ToString()); 
     } 
    } 

爲什麼數據沒有被成功接收的功能!

+0

你有什麼錯誤?它擊中了你的方法? –

+0

@ Alexandru-IonutMihai是的,它打擊方法和方法返回列表,如果數據。我dint得到任何錯誤。但它在文本框中顯示「未定義」文本。它不顯示實際值在文本框中。 –

+0

你試過成功嗎:function(data.d)?如果內存服務,當使用webmethods像你一樣的對象實際上是在'data.d',而不是'數據' –

回答

1

最後解決了它。我忘了提及

Public

SalesInvoiceFinalCalculationEntity

實體的所有變量和document.getElementById("txtinvoicevalue").value=(data.d[0].totalprice);這應該是代替

document.getElementById("txtinvoicevalue").value=(data.totalprice);

1

首先,使用async: false這是一個不好的做法,因爲它是凍結您的窗口在您的請求期間。 請勿使用它。

的問題是,你必須從你的server-side方法,以便返回json對象以接收成功回調你的Ajax方法的功能響應

[WebMethod] 
public static string salesInvoiceFinalCalculaiton(string InvoiceNo) 
{ 
     List<SalesInvoiceFinalCalculationEntity> list = new List<SalesInvoiceFinalCalculationEntity>(); 
     list = SalesInvoiceManager1.salesInvoiceFinalCalculaiton(InvoiceNo); 
     return JsonConvert.SerializeObject(list); 
} 

Web請求使用json格式。

+0

現在它顯示錯誤「JsonConvert劑量不存在當前上下文中」 –

+0

然後請添加引用。 –

+0

https://stackoverflow.com/questions/4444903/how-to-install-json-net-using-nuget。這是一個nuget包 –

0

我認爲問題是,您正嘗試將Java類發送到您的JavaScript文件。您只能發送簡單的數據類型數字,字母。據我所知,你試圖訪問SalesInvoiceFinalCalculationEntity的成員變量。

如果是這樣的話,您需要將它作爲JSON對象發送並獲取像這樣的數據,然後解析它。

AJAX背後的想法是讓用戶更好的體驗而不是使用異步請求來凍結網站。通過調用AJAX調用與

異步:假

刪除Ajax背後的想法。然後你可以簡單地對服務器進行正常的調用。

0

使用此:

https://www.newtonsoft.com/json

系列化你的列表並返回一個字符串。

然後,在你的javascript:

success: function (data) { 
    data = JSON.parse(data); 
    document.getElementById("txtinvoicevalue").value=(data.totalprice); 
    document.getElementById("txtTotalDiscount").value = data.discountamt; 
    document.getElementById("txtTotalTaxableValue").value = data.taxableamt; 
    document.getElementById("txtTotalCGST").value = data.cgstamt; 
    document.getElementById("txtTotalSGST").value = data.sgstamt; 
    document.getElementById("txtGrandTotal").value = data.grandtotal; 

}, 
+0

什麼是Service.svc? –

+0

您使用哪種web服務?它實際上是WCF –

+0

其簡單的asp.net webform,我通過ajax調用。 –

0

嘗試 success: function (data.d)而非success: function (data)。如果我記得使用webmethods時,返回對象在data.d中,而不是簡單的數據。

此外,儘管還有其他答案說。當使用[webmethod]屬性和jQuery ajax時,您不必將您的響應對象轉換爲json。它會自動完成。

+0

它給錯誤'.d'錯誤 - :預期'{'和預期';' –

+0

它看起來像你正在返回一個列表,所以你還需要遍歷你的響應對象?您的對象在瀏覽器開發工具中的外觀如何?你可以發佈嗎? –

+0

我不明白..我是新來的.. plz解釋你在這裏發帖以及如何去做? –