2012-03-28 15 views
6

Ho un servizio Web che contiene un metodo:ASMX webservice - ritorno JSON invece di XML

[WebMethod] 
public string Movies() 
{ 
    using (var dataContext = new MovieCollectionDataContext()) 
    { 
     var query = dataContext.Movies.Select(m =>new{m.Title,m.ReleaseDate}).Take(20); 
     var serializer = new JavaScriptSerializer(); 
     return serializer.Serialize(query); 
    } 
} 

Il metodo serializza correttamente l'oggetto, ma quando osservo la risposta a Firebug, sembra che questo:

<?xml version="1.0" encoding="utf-8"?> 
<string xmlns="http://tempuri.org/">[{"Title":"SQL","ReleaseDate":"\/Date(1224007200000)\/"},{"Title":"Termonator Salvation","ReleaseDate":"\/Date(1224007200000)\/"}]</string> 

Ecco metodo jQuery in cui io uso Kendo Data Source

$(function() { 
    alert("Welcome To Kendo"); 
    var dataSource = new kendo.data.DataSource(
       { 
        transport: { 
         read: { 
          type: "POST", 
          dataType: "json", 
          url: "/MovieService.asmx/Movies" 
          // contentType: "application/json; charset=utf-8" 

         } 
        }, 
        change: function (e) { 
         alert(e); 

        }, 
        error: function (e) { 
         alert(e[2]); 
        }, 
        pageSize: 10, 
        schema: { 
         data: "d" 

        } 


       }); 

    $("#MovieGridView").kendoGrid({ 
     dataSource: dataSource, 
     height: 250, 
     scrollable: true, 
     sortable: true, 
     pageable: true, 
     columns: [ 
      { field: "Title", title: "Movie Name" }, 
      { field: "ReleaseDate", title: "Movie Release" } 
      ], 
     editable: "popup", 
     toolbar: ["create"] 
    }); 
}); 

Il codice di cui sopra s come quello che sto facendo in jQuery e quando la chiamata evento di errore ho ottenuto questo errore

SyntaxError: JSON.parse: unexpected character 

Come posso convertire i dati di cui sopra in JSON in modo da poter usare in jQuery? E dove sto andando storto?

+0

Perché stai usando JSONP qui? Non ha senso. – Joe

+0

ok rimuovo jsonp ma il problema è ancora lo stesso risolvilo –

+0

ho trovato un altro modo per farlo usando WCF e JSONP la sua combinazione molto interessante e funziona perfettamente –

risposta

8

È necessario specificare l'ResponseFormat del metodo:

[WebMethod] 
[ScriptMethod(ResponseFormat = ResponseFormat.Json)] 
public string GetMovies() { 
} 

Nota: Per il bene degli altri che arrivano a questa domanda con problemi simili, è anche importante notare che si dovrebbe essere utilizzando POST richieste, non GET richieste. Vedere: JSON Hijacking and How ASP.NET AJAX 1.0 Avoids these Attacks


EDIT

Sulla base del jQuery che hai postato, non stai chiamando il metodo corretto. C# definisce un metodo chiamato GetMovies, ma jQuery sta tentando di chiamare un metodo chiamato "Film".

questo:

url: "/MovieService.asmx/Movies" 

dovrebbe cambiare a questo:

url: "/MovieService.asmx/GetMovies" 
+0

E non usare un GET – Joe

+0

niente succede lo stesso problema caro –

+1

@HaseebKhan, prima di tutto, non chiamarmi caro :-). In secondo luogo, questo è il modo corretto per restituire dati formattati JSON. Rivedi la mia risposta e conferma che l'hai implementata correttamente nel tuo ambiente di test. –

Problemi correlati