Avatar billede Jim Rasmussen Novice
18. november 2014 - 00:54 Der er 7 kommentarer og
1 løsning

c# javascriptserialize

Hvad gør jeg galt i nedenstående siden at $.ajax med datatype: 'json' ikke kan håndtere det?


JavaScriptSerializer serializer = new JavaScriptSerializer();

var json = serializer.Serialize(new { nextImage = new { id = nextImage.Id, src = nextImage.Url, rating = averageRating, width = size.Width, height = size.Height } });

return json;
Avatar billede arne_v Ekspert
18. november 2014 - 01:02 #1
Hvordan ser output ud?
Avatar billede Jim Rasmussen Novice
18. november 2014 - 01:22 #2
{"nextImage":{"id":1,"src":"C:\\Users\\jim\\Dropbox\\egne projekter\\rateme\\rateme\\Content\\UploadedImages\\8ff79390-9452-4aee-afe9-b0b3736fb065.jpg","rating":5.9459459459459456,"width":416,"height":549}}
Avatar billede arne_v Ekspert
18. november 2014 - 01:59 #3
Det set rigtigt ud.

Er der noget snask som ogsaa skrives ud foer eller efter?
Avatar billede softspot Forsker
18. november 2014 - 08:03 #4
Umiddelbart skal det vel være " og ikke "

Er det sådan dit output rent faktisk ser ud, eller er det noget der er sket ifm. plastring af JSON her på eksperten? Hvis det ser sådan ud, må der ske en eller anden HTML-encoding af din JSON mellem kaldet til din funktion og til det skal bruges på klienten. Hvordan efterbehandler du JSON, når det kommer ud på klienten? Har du sat Content-type til application/json på serveren?
Avatar billede Jim Rasmussen Novice
18. november 2014 - 09:18 #5
Der er ikke noget snask overhovedet. Det er 100% som Ajax kaldet modtager det.

Jeg prøvet at sætte application/json serverside.

Nedenfor kan mit ajax kald ses. Og nej. Eksperten har ikke ændret output



$.ajax({
                    dataType: "json",
                    url: "@Url.Action("NextAndRate", "Home")",
                    data: { 'id': $(this).find("img").attr("data-id"), 'rating': thisRating },
                    success: function (jsonData) {
                        console.log(jsonData);
                        ////Inserts new data to the img tag

                        ////Loads the new image before animation
                        //$('.slide img').load(function () {
                        //    alert("Image loaded")
                        //    $(".slide").css({ marginLeft: "auto", marginRight: 0 });
                        //    $(".slide").animate({ marginRight: slideMargin, opacity: 1 }, 300);
                        //}).each(function () {
                        //    //If the image is already loaded (In cache) then we manually trigger the load event to begin animation
                        //    if (this.complete) {
                        //        $(this).trigger('load');
                        //    }
                        //});
                    },
                    error: function () {
                        alert("Error getting next image");
                    }
                });
Avatar billede Jim Rasmussen Novice
18. november 2014 - 09:30 #6
WOrks now.

return Content(json, "application/json");


Takker for at gøre mig opmærksom på application/json.


Men hvem skal ha points? :-/
Avatar billede softspot Forsker
19. november 2014 - 08:18 #7
Velbekomme :)
Avatar billede softspot Forsker
19. november 2014 - 08:22 #8
Hvis det er MVC kan du bare returnere Json med den indbyggede helper:

return Json(
  new {
      nextImage = new {
        id = nextImage.Id,
        src = nextImage.Url,
        rating = averageRating,
        width = size.Width,
        height = size.Height
      }
  });


i stedet for selv at instantiere en JavaScript Serializer.
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
IT-kurser om Microsoft 365, sikkerhed, personlig vækst, udvikling, digital markedsføring, grafisk design, SAP og forretningsanalyse.

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester