איך לקבל רשימה (handler) ב Ajax

בוקה3

New member
איך לקבל רשימה (handler) ב Ajax

שלום חברים,
אני פונה לhandler על מנת לקבל רשימה של "פירות" (לצורך הדוגמא).
בAjax אני לא מצליח לקבל אותם

יש לי handler אשר מחזיר List<string>
public void ProcessRequest (HttpContext context) { context.Response.ContentType = "application/text";

List<string> lstfruits = new List<string>(); lstfruits.Add("orange"); lstfruits.Add("apple"); context.Response.Write(lstfruits); }

כאשר אני מנסה לברל ב AJAX לא מצליח לקבל את האייטמים

$.ajax({ url: "http://localhost:26876/Test2/Handler.ashx",
async: false,
contentType: 'application/json',
success: function (Data) { console.log(Data); // for (var i = 0; i < lstData.length; i++) { // console.log(lstData); // } $('#test').append("<option value='saab'>Saab</option>"); } });

מה שאני מקבל זה : System.Collections.Generic.List`1[System.String].

איך אני עושה כדי לקבל את האיטמים ולהכניס ל DropDown
 

arik23m

New member
אתה צריך לעשות סריאליזציה לרשימה שלך

כיום אתה מקבל System.Collections.Generic.List`1[System.String]
בגלל שזה הפונקציה שיש למערכת כשהיא צריכה לעשות המרה של האובייקט למחרוזת - היא נקראת ToString().
אם תמיר את המחרוזת שלך לJSON כמו הפורמט שהגדרת בContentType
תוכל לקבל את הרשימה שלך כמערך מסוג JSON
יש מספר ספריות סריאליזציה לכך
זה דוגמא לסריאליזצור שנמצא בFRAMEWORK

using System.Web.Script.Serialization;var jsonSerialiser = new JavaScriptSerializer();
var json = jsonSerialiser.Serialize(aList);

(אחר כך בצד הלקוח תצטרך לעבור על המערך ולהוסיף כל אלמנט מהמערך לddl שלך)
success: function (data) { $.each(data, function (index, item) {
$('#dropDownList').append(
$('<option></option>').val(item).html(item)
); });
 

Royi Namir

New member
בהמשך למה שאריק אמר

אתה מגדיר CONTENT TYPE ב JQUEY שהוא JSON
אבל CONTENT TYPE זה לא עבור מה שאתה רוצה לקבל אלא עבור מה שאתה רוצה לשלוח(!) ואתה לא שולח שום דבר ב DATA
את מה שאתה רוצה לקבל אתה שם ב DATATYPE ולא ב CONTENTTYPE ( אני תמיד זוכר את זה על פי ה D ב DATATYPE ו D זה האות "ד" מהמילה "דורש" , כלומר "דורש -----> DATATYPE"
כך שזה לא ממש משנה מה שרשמת ב CLIENT
תצטרך לשנות את זה ל DATATYPE ...( למה ? כי אם אתה שם DATATYPE JSON , אז הוא כבר אוטומטית ממיר לך את הסטרינג לאובייקט JS).

ב SERVER כן תצטרך לשנות את ה CONTENTTYPE ל APPLICATION JSON ( לא חובה אבל מומלץ)
 
למעלה