2012-09-13 15 views
12

Solo non capisco cosa sto facendo male .. ho cercato dozzine di domande simili, ma ho ancora incomprensioni ... quando chiamo la funzione CallHandler da JS, ricevo sempre l'avviso "Richiesta non riuscita". per favore aiutatemi.passa jquery json in 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# code-behind:

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; } 
} 

risposta

24

Prova

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

modificare ho rimosso le citazioni da nomi delle proprietà

Inoltre, la stringa JSON deve essere letto 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(); 
} 

Un lavoro soluzione

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, ho cambiato il codice come Tu postato, ma ancora ottenuto solo "richiesta di fail" avviso. – ailmcm

+0

Ho aggiunto una soluzione di lavoro –

+1

GRAZIE SOOOO MOLTO! Mi hai salvato la giornata! funziona bene ora. – ailmcm