[英]asp.net page not returning ajax request
我試圖從ASP.NET Gridview行發送一個AJAX請求。 gridview中的每一行都顯示已完成的作業。 某些作業包含可以下載的文件。 這里的最終目標是在彩盒覆蓋中顯示下載URL,但是我現在無法將文件列表返回到基頁。 要顯示要從訂單下載文件,我取消隱藏訂單號列中的按鈕控件。 頁面上的Javascript如下。
$(document).ready(function () {
$("#<%=gvMessenger.ClientID%> input").filter(":not(:has(table, th))").click(function (e) {
e.preventDefault();
var $cell = $(e.target).closest("td");
//$("#<%=gvMessenger.ClientID%> td").removeClass("highlight"); $cell.addClass("highlight"); $("#message").text('You have selected: ' + $cell.text());
$("#Message").html("");
var orderID = $cell.text()
orderID = $.trim(orderID);
sendData(orderID);
function sendData(orderID) {
var loc = window.location.href;
loc = (loc.substr(loc.length - 1, 1) == "/") ?
loc + "CompletedOrdersNew.aspx" : loc;
$.ajax({
type: "POST",
url: loc + "/GetFiles",
data: "{'orderID':'" + orderID + "'}",
contentType: "application/jason; charset=utf-8",
datatype: "json",
success: function (msg) {
$("ContentArea").html(msg.d);
},
error: function () {
alert("An error occured in getting your files.");
}
});
}
});
});
應該觸發ajax請求的頁面代碼隱藏中的函數如下。
<WebMethod()> _
Public Shared Function GetFiles(ByRef orderID As Integer) As String
Dim dict As New Dictionary(Of String, Object)
Dim dt As DataTable
dt = Dac.ExecuteDataTable("GetS3Files", Parameter("@OrderID", orderID))
Dim arrr(dt.Rows.Count) As Object
For i As Integer = 0 To dt.Rows.Count - 1
arrr(i) = dt.Rows(i).ItemArray
Next
Dim json As New JavaScriptSerializer
Return json.Serialize(dict)
End Function
在FireBug中觀看頁面時,我看到請求發送到GetFiles函數,訂單號為{'orderID':'10000315'}
POST http://localhost:57210/AMSSite/Customer/CompletedOrdersNew.aspx/GetFiles
但是調用不會觸發GetFiles函數,我得到的響應是頁面html。
不知道這里發生了什么。
嘗試將orderID
作為數字發送,因為webmethod需要一個int,同樣在JSON鍵和字符串中引用雙引號( "
)
data: "{\"orderID\":" + orderID + "}",
您在contentType
選項中輸入了一個拼寫錯誤。 應該是: contentType: "application/json; charset=utf-8"
我會回答我的問題,因為任何其他VB.NET/ASP.NET人都遇到了這個問題。 除了我的拼寫錯誤之外,這里的問題是我的WebMethod功能是ByRef。 它需要是BYVAL 。 在將我的頭撞到牆上並閱讀javascript和json服務的一些很棒的東西后,我在http://projectsmm.com/technet/asp/index.shtml找到了真正的答案。 VB.Net默認將函數變量設置為ByRef。 出於某種原因,.NET Web服務不接受這一點。 改為ByVal,它的工作原理。
希望這有助於其他人不花時間我看這個。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.