2012-09-13 12 views
12

Simplemente no lo entiendo lo que estoy haciendo mal .. he estado buscando docenas de preguntas similares, pero todavía tengo malentendidos ... cuando llamo a la función CallHandler de JS, siempre recibo una alerta de "Solicitud fallida". por favor ayúdame.pase jquery json a asp.net httphandler

JS/jQuery:

function CallHandler() { 
    $.ajax({ 
     url: "DemoHandler.ashx", 
     contentType: "application/json; charset=utf-8", 
     type: 'POST', 
     dataType: "json", 
     data: [{"id": "10000", "name": "bill"},{"id": "10005", "name": "paul"}], 
     success: OnComplete, 
     error: OnFail 
    }); 
    return false; 
} 

function OnComplete(result) { 
    alert(result); 
} 
function OnFail(result) { 
    alert('Request Failed'); 
} 

asp.net C# código detrás:

public void ProcessRequest(HttpContext context) 
{ 
    JavaScriptSerializer jsonSerializer = new JavaScriptSerializer(); 
    string jsonString = HttpContext.Current.Request.Form["json"]; 

    List<Employee> emplList = new List<Employee>(); 
    emplList = jsonSerializer.Deserialize<List<Employee>>(jsonString); 

    string resp = ""; 
    foreach (Employee emp in emplList){ 
    resp += emp.name + " \\ "; 
    } 
    context.Response.Write(resp); 
} 

public class Employee 
{ 
    public string id { get; set; } 
    public string name { get; set; } 
} 

Respuesta

24

Trate

data: JSON.stringify([{id: "10000", name: "bill"},{id: "10005", name: "paul"}]) 

edición Quité las cotizaciones de los nombres de las propiedades

Además, la cadena JSON necesita ser leído in other way

string jsonString = String.Empty; 

HttpContext.Current.Request.InputStream.Position = 0; 
using (StreamReader inputStream = new StreamReader(HttpContext.Current.Request.InputStream)) 
{ 
    jsonString = inputStream.ReadToEnd(); 
} 

Una solución de trabajo

public void ProcessRequest(HttpContext context) 
{ 
    var jsonSerializer = new JavaScriptSerializer(); 
    var jsonString = String.Empty; 

    context.Request.InputStream.Position = 0; 
    using (var inputStream = new StreamReader(context.Request.InputStream)) 
    { 
     jsonString = inputStream.ReadToEnd(); 
    } 

    var emplList = jsonSerializer.Deserialize<List<Employee>>(jsonString); 
    var resp = String.Empty; 

    foreach (var emp in emplList) 
    { 
     resp += emp.name + " \\ "; 
    } 

    context.Response.ContentType = "application/json"; 
    context.Response.ContentEncoding = Encoding.UTF8; 
    context.Response.Write(jsonSerializer.Serialize(resp)); 
} 

public class Employee 
{ 
    public string id { get; set; } 
    public string name { get; set; } 
} 

public bool IsReusable 
{ 
    get 
    { 
     return false; 
    } 
} 
+0

ty, he cambiado de código que envió, pero aún así consiguió única "solicitud de fallar" alerta. – ailmcm

+0

Agregué una solución de trabajo –

+1

¡MUCHAS GRACIAS! ¡Salvaste mi día! funciona bien ahora – ailmcm

Cuestiones relacionadas