2016-05-07 3 views
1

EDIT: Tatsächliche Fehler Ich bin aus dem Netzwerk Daten zu erhalten:Rückkehr google map Marker mit Ajax immer null

enter image description here

"Invalid JSON primitiv: Position"

-Code für sie anrufen:

function AddMarkerAndPanTo(latLng, map) { 
    var marker = new google.maps.Marker({ 
     position: latLng, 
     map: map 
    }); 

    var x = marker.position; 

    $.ajax({ 
     type: "POST", 
     url: '@Url.Action("AddMarker", "Map")', // Map Controller, AddMarker Action 
     data: JSON.stringify({ "position": x }), 
     contentType: "application/json; charset=utf-8", 
     dataType: "json", 
     success: function (data) { 
      if (data.done) 
       alert("Marker added"); 
      else 
       alert("MARKER FAILED"); 
     } 
    }); 
    map.panTo(latLng); 
} 

Die serverseitige Funktion ein Ansichtsmodell darunter geschrieben werden:

[HttpPost] 
public ActionResult AddMarker(LatLngViewModel position) 
{    
    if (position != null) 
     return Json(true, JsonRequestBehavior.AllowGet); 
    else 
     return Json(false, JsonRequestBehavior.AllowGet); 
} 

Ansichtsmodell:

public class LatLngViewModel 
{ 
    double latitude { get; set; } 
    double longitude { get; set; } 
} 

Ich habe versucht, mit Anführungszeichen und ohne auf Position stringifying das Ergebnis oder es mit toJSON Rückkehr(). Versuchte das ToSend zusammen mit verschiedenen Anführungszeichen etc. zu stitchen. An dieser Stelle habe ich keine Ahnung was es verursacht und ich habe keine anderen Lösungen zur Hand. Schätze jede Hilfe bei der Auflösung und sende die blutigen Koordinaten zurück, um sie irgendwie an das Modell zu binden.

+0

Welche Server-Seite Sprache verwenden Sie? – scaisEdge

+0

Es ist C#, mit ASP.NET – Ben

Antwort

1

Sie benötigen ein Objekt mit Breiten- und Längeneigenschaften geben Ihre Ansicht Modell anzupassen. Wie folgt aus:

function AddMarkerAndPanTo(latLng, map) { 
    var marker = new google.maps.Marker({ 
     position: latLng, 
     map: map 
    }); 

    $.ajax({ 
     type: "POST", 
     url: '@Url.Action("AddMarker", "Map")', // Map Controller, AddMarker Action 
     data: { 
      latitude: latLng.lat(), 
      longitude: latLng.lng() 
     }, 
     success: function (data) { 
      if (data.done) 
       alert("Marker added"); 
      else 
       alert("MARKER FAILED"); 
     } 
    }); 

    map.panTo(latLng); 
} 

Dies ist der wichtigste Teil, die Sie vermisst wurden:

data: { 
    latitude: latLng.lat(), 
    longitude: latLng.lng() 
}, 

Das latLng Objekt, das an diese Funktion übergeben wird, hat zwei Eigenschaften lat und lng die wiederum Funktionen, die Sie benötigen aufzurufen, um die entsprechenden Koordinaten als Dezimalwerte zu erhalten.


UPDATE:

Stellen Sie sicher, dass Ihre Ansicht Modell-Eigenschaften sind öffentlichen:

public class LatLngViewModel 
{ 
    public double latitude { get; set; } 
    public double longitude { get; set; } 
} 
+0

Danke für die Antwort, ich habe bereits die Funktionsaufrufe für beide Werte ausgeführt und die Schreibweise doppelt überprüft. Nach dem Entfernen von contentType und dataType wurde der Fehler glücklicherweise gestoppt, aber alle zurückgegebenen Daten sind jetzt 0. Ich habe versucht, Werte im viewModel als float, double und decimal zu vergeben. – Ben

+0

Siehe meine aktualisierte Antwort. Die Eigenschaften Ihres Ansichtsmodells sollten ** public ** sein oder der Modellbinder ignoriert sie. –

+0

Ich habe es genagelt ... und das sind 4 Stunden meiner Zeit, die genau dort auf diesem einen Wort verbrannt sind. Danke nochmal. Ich muss mich jetzt ein wenig hinlegen: P – Ben

0

Verwenden Sie nicht JSON.stringify, um die Post-Daten vorzubereiten.

einfach verwenden:

data: { "position": latLng.toJSON()}, 
+1

Können Sie die Begründung dafür erklären? Ich habe deine Empfehlung ausprobiert, es gibt mir jetzt einen 500 (Interner Serverfehler), den ich geändert habe. – Ben

+1

Das letzte Mal, dass ich diesen Fehler hatte, liegt daran, dass sie zirkuläre Referenzen enthalten könnten, was bedeutet, dass ich irgendwelche zirkulären Informationen irgendwie eliminieren und aufräumen muss, indem ich nur die Länge und Breite separat sende, nicht sicher, wie ich das weiter machen soll. – Ben