2012-03-28 16 views
6

mam serwis internetowy, który zawiera jedną metodę:ASMX WebService - powrót JSON, zamiast 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); 
    } 
} 

Sposób właściwie serializuje obiekt, ale kiedy zobaczyć odpowiedź w Firebug, wygląda to tak:

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

Oto metoda jQuery, w którym używam Kendo Źródło danych

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

powyższy kod s jak to, co robię w jQuery i kiedy rozmowa zdarzenie błędu mam ten błąd

SyntaxError: JSON.parse: unexpected character 

Jak mogę przekonwertować powyższe dane w formacie JSON, dzięki czemu można go używać w jQuery? I dokąd się mylę?

+0

Dlaczego używasz jsonp tutaj? To nie ma sensu. – Joe

+0

ok usunąć jsonp, ale problem jest nadal ten sam plz rozwiązać go –

+0

znalazłem inny sposób robienia tego przy użyciu WCF i JSONP jego bardzo fajne połączenie i działa doskonale –

Odpowiedz

8

Musisz określić ResponseFormat metody:

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

Uwaga: W trosce o innych, którzy przybywają na to pytanie z podobnej kwestii, ważne jest też, aby pamiętać, że należy być przy użyciu POST żądań, a nie GET żądań. Zobacz: JSON Hijacking and How ASP.NET AJAX 1.0 Avoids these Attacks


EDIT

oparciu o jQuery, który pisał, że nie dzwonisz właściwą metodę. You C# definiuje metodę o nazwie GetMovies, ale Twoja jQuery próbuje wywołać metodę o nazwie `Movies '.

to:

url: "/MovieService.asmx/Movies" 

powinien zmienić się w ten sposób:

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

I nie używaj GET – Joe

+0

nic się nie dzieje ten sam problem kochany –

+1

@HaseebKhan, po pierwsze, nie dzwoń do mnie kochanie :-). Po drugie, jest to właściwy sposób zwracania sformatowanych danych JSON. Zapoznaj się z moją odpowiedzią i potwierdź, że została ona poprawnie zaimplementowana w środowisku testowym. –

Powiązane problemy