Domanda

Ho un semplice metodo web su un'applicazione asp.net 2.0 (usando le estensioni 1.0 non le estensioni ajax 3.5). Sto tentando di chiamare il metodo da jQuery e quando lo faccio come mostrano gli innumerevoli esempi su Internet e qui su SO, viene restituito un messaggio di errore del server interno.

Ecco il mio codice attuale:

[WebMethod]
[ScriptMethod(ResponseFormat=ResponseFormat.Json)]
public string Select(string login)
{
    UserProfile profile = UserProfile.GetUserProfile(login);

    return "{ FirstName: '" + profile.FirstName + "', " +
             "LastName: '" + profile.LastName + "', " +
             "EmailAddress: '" + profile.EmailAddress + "', " +
             "PhoneNumber: '" + profile.PhoneNumber + "' }";
 }

E ora il jquery:

$.ajax({
    type: "POST",
    url: "Services/ProfileService.asmx/Select",
    dataType: "json",
    data: "{'login':'DOMAIN%5CUSER1'}",
    contentType: "application/json; charset=utf-8",
    success: function(msg){ alert(msg); },
    error: function(xhr){ alert(xhr.statusText);}     
});

Il servizio web è decorato anche con l'attributo [ScriptService] . Se commento contentType, cambio dataType in testo e cambio i dati in una stringa di query (nome = valore), viene restituito l'XML in modo appropriato.

Dove sbaglio?

UPDATE: Sto usando jQuery v1.3.1 e test in IE6 e Firefox 3. Sto ottenendo risultati coerenti.

È stato utile?

Soluzione

Questo è stato uno stupido errore da parte mia. Il problema è stato risolto Mentre ho incluso il riferimento alle estensioni AJAX, ho dimenticato di riscrivere il httphandler per i servizi ASMX nella classe ScriptHandlerFactory.

L'aggiunta di questo ha risolto il problema.

Dato che ho ricevuto alcune e-mail in cui si chiedevano esempi o come ho risolto il problema, ho scritto un post sul blog su come fare questa zuppa alle noci.

http: //randomactsofcoding.blogspot .com / 2009/03 / jquery-jSON-e-ASMX-20-services.html

Altri suggerimenti

Yeap. Dovresti abbandonare ASMX per WCF. Raccomandazione degli stessi Microsoft. Immagino che non ti aiuterà nel tuo problema, ma faresti bene a prendere in considerazione WCF o almeno a iniziare a guardare quella tecnologia.

Ho avuto lo stesso problema ma è stato risolto quando ho aggiunto quanto segue al file di codice

[System.Web.Script.Services.ScriptService]

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top