【发布时间】:2018-07-13 06:13:48
【问题描述】:
我收到一个 jQuery AJAX 调用的空/未定义响应。我正在尝试将数据绑定到 asp.net webforms 中的 Jquery 数据表。当我尝试解析数据时,它在 JSON 中的位置 1 Error 处给了我一个 Unexpected token o。我怀疑问题可能出在 JSON 数据上,但我已经在 JSONlint.com 验证了 json 输出。 一定是我犯了一些愚蠢的错误,但我无法弄清楚,我已经浪费了数小时来排除故障。
jQuery Ajax 调用
<script type="text/javascript">
$(function () {
$('#ShowData').click(function () {
$.ajax({
type: "POST",
contentType: "application/json; charset=utf-8",
url: 'Default.aspx/fetchDetails',
dataType: 'json',
data: "{'JobID':'" + $('#txtJobID').val() + "'}",
success: function (response) {
//var d = JSON.parse(data);
var data = response.d;
alert(typeof (data)); //gives out object
alert(response.d); //gives out null
$('#tblBasicInfo').dataTable({
paging: false,
data: data,
columns: [
{ 'data': 'JobId' },
{ 'data': 'UserId' },
{ 'data': 'UserName' },
{ 'data': 'Cas' },
{ 'data': 'Question' },
{ 'data': 'Language' },
{ 'data': 'Appl' },
]
});
},
error: function (xhr, ajaxoptions, thrownError) {
alert(xhr.responseText);
console.log(xhr.responseText);
console.log(xhr.responseJSON);
}
});
});
});
</script>
网络方法
[System.Web.Services.WebMethod]
[ScriptMethod(ResponseFormat = ResponseFormat.Json)]
public static void fetchDetails(string JobID)
{
var conn = System.Configuration.ConfigurationManager.ConnectionStrings["Connection"];
SqlConnection con = new SqlConnection(conn.ToString());
String query = "Select TOP 1 * FROM TAble where Jobid =@JobID";
DataTable dtBasicInfo = new DataTable();
SqlCommand a = new SqlCommand(query, con);
a.Parameters.AddWithValue("@JobID", Int32.Parse(JobID));
con.Open();
SqlDataAdapter da = new SqlDataAdapter(a);
da.Fill(dtBasicInfo);
SqlDataReader value = a.ExecuteReader();
con.Close();
JavaScriptSerializer js = new JavaScriptSerializer();
JavaScriptSerializer jsSerializer = new JavaScriptSerializer();
List<Dictionary<string, object>> parentRow = new List<Dictionary<string, object>>();
Dictionary<string, object> childRow;
foreach (DataRow row in dtBasicInfo.Rows)
{
childRow = new Dictionary<string, object>();
foreach (DataColumn col in dtBasicInfo.Columns)
{
childRow.Add(col.ColumnName, row[col]);
}
parentRow.Add(childRow);
}
var jsk = jsSerializer.Serialize(parentRow);
}
JSON
[{"JobId":123456789,"UserId":"asdf3a ","UserName":"Pekki, Barb ","Cas":263,"Question":"Q12345","Language":"ENG","Appl":300}]
【问题讨论】:
-
我已经发布了答案。您正在以错误的方式执行 Web 方法。在处理网络方法时,您需要记住一些简单的点,我在回答中已经提到过。
标签: jquery asp.net ajax datatables webmethod