2012-03-28 19 views
6

Ich habe einen Web-Service, eine Methode enthält:ASMX Webservice - Rückkehr JSON statt 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); 
    } 
} 

Die Methode serialisiert ordnungsgemäß das Objekt, aber wenn ich die Antwort in FireBug ansehen, dann sieht es wie folgt aus:

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

ist hier jQuery Verfahren, in dem ich Kendo Datenquelle verwenden

$(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"] 
    }); 
}); 

Der obige Code s wie das, was ich in jQuery tue und wenn das Fehlerereignis Anruf ich diesen Fehler bekam

SyntaxError: JSON.parse: unexpected character 

Wie kann ich die obigen Daten in JSON umwandeln, damit ich es in jQuery? Und wo gehe ich falsch?

+0

Warum Sie JSONP verwenden hier? Es macht keinen Sinn. – Joe

+0

ok ich entferne jsonp aber problem ist immer noch gleich plz löse es –

+0

ich fand einen anderen weg dies zu tun mit WCF und JSONP seine sehr coole kombination und perfekt funktionieren –

Antwort

8

Sie müssen die ResponseFormat der Methode definieren:

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

Hinweis: Im Interesse des anderen, die in dieser Frage mit ähnlichen Problemen kommt, dann ist es auch wichtig zu beachten, dass Sie POST Verwendung sein sollten Anfragen, nicht GET Anfragen. Siehe: JSON Hijacking and How ASP.NET AJAX 1.0 Avoids these Attacks


EDIT

Basierend auf der jQuery, die Sie auf dem Laufenden, du bist nicht die richtige Methode aufrufen. You C# definiert eine Methode namens GetMovies, aber Ihre jQuery versucht, eine Methode namens `Movies 'aufzurufen.

Dieses:

url: "/MovieService.asmx/Movies" 

Sollte auf diese ändern:

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

Und benutze kein GET – Joe

+0

nichts passiert gleiches Problem lieber –

+1

@HaseebKhan, vor allem, nenn mich nicht lieben :-). Zweitens ist dies der richtige Weg, um JSON-formatierte Daten zurückzugeben. Bitte überprüfen Sie meine Antwort und bestätigen Sie, dass Sie sie ordnungsgemäß in Ihrer Testumgebung implementiert haben. –