2016-04-20 6 views
0

Ich versuche, alte Schienen-Anwendung durch den neuen Phoenix zu ersetzen. Ich sende die Ajax-Anfrage und versuche zu erkennen, wie JSON über jQuery automatisch ist. Das Problem ist, dass Schienen kehrt diesen Inhalt:Warum gibt Phoenix Controller einen JSON zurück, der nicht als JSON erkannt werden kann

{"user_id":1,"user_avatar_url":"/avatar.png"} 

während mein Phönix App gibt diese:

"{\"id\":1,\"avatar_url\":\"/avatar.png\"}" 

so brauche ich JSON.parse zu erkennen, diesen Inhalt als JSON-Objekt ausgeführt werden. Was kann ich tun, um es automatisch zu analysieren?

Mein Phoenix-Code:

# the controller part responsible for rendering 
conn 
|> put_session(:user_id, user.id) 
|> json(Poison.encode!(user)) 

# poison serializer placed in model 
    defimpl Poison.Encoder, for: Harvest.User do 
    def encode(user, _options) do 
     user 
     |> Map.put(:avatar_url, "/avatar.png") 
     |> Map.take([:id, :avatar_url]) 
     |> Poison.encode!([]) 
    end 
    end 

Antwort

1

Sie müssen nicht manuell einen Begriff kodieren Poison.encode! verwenden, wenn Phoenix.Controller.json/2 verwenden, übernimmt das für Sie, dass. Ihre Daten werden jetzt doppelt codiert.

Der Code sollte nur sein:

conn 
|> put_session(:user_id, user.id) 
|> json(user) 
+0

Dank! Das hat mir sehr geholfen – asiniy