比方說,我有在看一個SQL Server數據庫中的表像jQuery的Ajax調用數據庫上點擊ASP.net
StateName notes
alabama 'notes about alabama'
alaska 'notes about alaska'
..... .........
編輯:這個問題將分爲兩個部分,一個用於最初的問題,爲什麼它不工作,我的改革,希望更準確的第二個解決方案。
在Web窗體中,狀態的名稱在表格內部表示爲鏈接按鈕。我嘗試使用jQuery在用戶單擊狀態名稱時進行Ajax數據庫調用,鏈接按鈕的文本值將發送到數據庫中的存儲過程。 該存儲過程是一樣的東西
create proc spGetStateData
@stateName varchar(50)
as
begin
select notes from
states
where statename = @stateName
end
出於測試目的,我加了AA文本框和一個按鈕,這樣,當用戶鍵入狀態變成文本框的名稱,從States
數據庫表中的Notes
列被展示。
[WebMethod]
public static string GetStateData(string stateName)
{
string stateNotes = string.Empty;
string cs = ConfigurationManager.ConnectionStrings["dbcs"].ConnectionString;
using (SqlConnection con = new SqlConnection(cs))
{
using (SqlCommand cmd = new SqlCommand("spGetStateData", con))
{
con.Open();
cmd.CommandType = CommandType.StoredProcedure;
cmd.Parameters.AddWithValue("@stateName", stateName);
stateNotes = cmd.ExecuteScalar().ToString();
}
}
return stateNotes;
}
protected void btnSubmit_Click(object sender, EventArgs e)
{
lblStateNotes.Text = GetStateData(txtStateName.Text);
hiddenDiv.Visible = true;
}
這部分工作,所以我知道這不是我的WebMethod或數據庫連接失敗。當我嘗試用jQuery做同樣的事情時,它失敗了。
<script type="text/javascript" language="javascript">
$(document).ready(function() {
$("#states a").click(function() {
$.ajax({
type: "POST",
contentType: "application/json; charset=utf-8",
url: "WebForm1.aspx/GetStateData",
data: $(this).text(),
dataType: "json",
success: function (data) {
response(data.d);
},
error: function (x) {
alert('error');
}
});
});
});
</script>
好吧,我拉開了開發工具與Chrome和發現了什麼的AJAX失敗的原因是,我得到一個「無法加載資源HTTP 500錯誤」。它告訴我方法名稱和參數找不到(儘管它們在那裏有所有權利)。所以我嘗試了第二種方式,這似乎是一種更好的方式(如果我可以得到它的工作!)
然後,我想'讓我們使用WebService'。這裏是我的該譯本:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<title></title>
<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.10.2/jquery.min.js"></script>
<script type="text/javascript">
$(document).ready(function() {
$("a").click(function() {
var stateName = JSON.stringify({ "stateName": $(this).text() });
$.ajax({
type: "POST",
url: "GetStateData.asmx/GetData",
contentType: "application/json; charset=utf-8",
data: stateName,
dataType: "json",
success: function (data) {
$("#lblNotes").text(data);
},
error: function (x) {
alert('message');
}
});
});
});
</script>
</head>
<body>
<form id="form1" runat="server">
<div>
<a href="#">Alabama</a>
<a href="#">Alaska</a>
<asp:Label runat="server" ID="lblNotes"></asp:Label>
</div>
</form>
</body>
</html>
Web服務:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Services;
using System.Configuration;
using System.Data;
using System.Data.SqlClient;
using System.Web.Script.Services;
namespace jQueryAjaxWebservice
{
[WebService(Namespace = "http://tempuri.org/")]
[WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
[System.ComponentModel.ToolboxItem(false)]
[System.Web.Script.Services.ScriptService]
public class GetStateData : System.Web.Services.WebService
{
[WebMethod]
[ScriptMethod]
public string GetData(string stateName)
{
string cs = ConfigurationManager.ConnectionStrings["dbcs"].ConnectionString;
string stateNotes ="test" ;
using (SqlConnection con = new SqlConnection(cs))
{
using (SqlCommand cmd = new SqlCommand("spGetStateData",con))
{
con.Open();
cmd.CommandType = CommandType.StoredProcedure;
cmd.Parameters.AddWithValue("@stateName", stateName);
stateNotes = cmd.ExecuteScalar().ToString();
}
}
return stateNotes;
}
}
}
我測試過的WebService,和它的作品。但是,當我嘗試從default.aspx調用Web服務代碼時,我將[Object object]
作爲lblNotes
文本。如果我將(數據)更改爲「測試」,那麼我會在屏幕上獲得正確的「測試」輸出。所以有問題的部分位於Ajax調用的success
部分。我在GetData函數上放置了一個斷點,並且stateNotes
正在接收正確的文本值,因此問題所在的唯一位置是在ajax調用的success
行中。
將您的數據更改爲數據:「{'stateName':'」+ $(this).text()+「'}」, – Zaki
在您的return語句中放置一個斷點,確保代碼到達該行並具有預期的價值。 – Jay
@Jay是的,它正在從數據庫中讀取並獲得正確的值。 – wootscootinboogie