[英]Parse JSON to an Array property of an Object
當前,我有一個AJAX請求,它將運行以下SQL語句。
select top 1
DrugQuestionId
,DrugId
,DrugQuestion as DrugQuizquestion
,CorrectAnswer
,QuizQuestionTypeId
from DrugQuestions
並給我一個drugQuestion
對象,其屬性在SQL Server表中列出。
相關的JS:
$(document).ready(function ()
{
$('#btnSubmit').click(function ()
{
$.ajax(
{
type: "POST",
url: "GetDrugQuiz.asmx/GenerateDrugQuestion",
contentType: "application/json; charset=utf-8",
dataType: "json",
success: function (data)
{
var drugQuestion = $.parseJSON(data.d);
//everything prints to the console correctly
console.log(drugQuestion.DrugQuestionId); //5 in this example
console.log(drugQuestion.DrugId);
console.log(drugQuestion.DrugQuizQuestion);
console.log(drugQuestion.CorrectAnswer);
console.log(drugQuestion.QuizQuestionTypeId);
},
error: function (xhr)
{
alert(xhr.status);
}
});
});
});
這工作正常,並給了我我想要的答案。 在實踐中,我需要一個drugQuiz
對象,該對象的屬性是drugQuestion
對象的數組。 我使用以下WebMethod進行嘗試:
//this is questions, plural mean to populate an array with a length equal to the row count
//of the query
public string GenerateDrugQuestions()
{
var jss = new JavaScriptSerializer();
DrugQuiz qz = new DrugQuiz();
qz.PatientId = 123;
qz.DateTaken = DateTime.Now;
qz.DrugQuizId = 1;
string cs = ConfigurationManager.ConnectionStrings["dbcs"].ConnectionString;
using (var con = new SqlConnection(cs))
{
using (var cmd = new SqlCommand("select top 3 * from DrugQuestions", con))
{
con.Open();
SqlDataReader rdr = cmd.ExecuteReader();
while (rdr.Read())
{
DrugQuestion dq = new DrugQuestion();
dq.DrugQuestionId = (int)rdr["DrugQuestionId"];
dq.DrugId = (int)rdr["DrugId"];
dq.DrugQuizQuestion = rdr["DrugQuestion"].ToString();
dq.CorrectAnswer = rdr["CorrectAnswer"].ToString();
dq.QuizQuestionTypeId = (int)rdr["QuizQuestionTypeId"];
qz.DrugQuestions.Add(dq);
}
return jss.Serialize(qz);
}
}
}
因此,您可以看到從WebMethod返回了JSON字符串。 當我使用WebMethod而不實際訪問頁面並點擊Invoke時,我得到了正確的字符串。 我不知道是如何填充drugQuestions
數組的,該數組是drugQuiz
對象的屬性。 我需要對以下代碼進行哪些更改以允許這種情況發生?
$(document).ready(function ()
{
var drugQuiz = {};
drugQuiz.drugQuestions = new Array();
$('#btnSubmit').click(function ()
{
$.ajax(
{
type: "POST",
url: "GetDrugQuiz.asmx/GenerateDrugQuestions",
contentType: "application/json; charset=utf-8",
dataType: "json",
success: function (data)
{
drugQuiz.drugQuestions.push($.parseJSON(data.d));
console.log(drugQuiz.drugQuestions.length);
console.log(drugQuiz.drugQuestions);
},
error: function (xhr)
{
alert(xhr.status);
}
});
});
});
我需要能夠執行類似alert(drugQuiz.drugQuestions [0] .DrugId)的操作;
遍歷返回的JSON並將每個項目推入JavaScript數組,如下所示:
success: function (data) {
$.each(data.d, function(i, item) {
drugQuiz.drugQuestions.push(item);
});
},
如果要使用parseJSON()
進行此操作,請嘗試以下操作:
success: function (data) {
var jsonData = JSON.parse(data.d);
for (var i in jsonData.drugQuestions) {
var question = jsonData.drugQuestions[i];
}
},
注意:我不確定您的JSON對象的名稱,我猜測drugQuestions
是傳遞回的drugQuestion
對象數組的名稱,如果不是,則更改jsonData.
值以匹配返回的JSON結構。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.