2014-03-12 8 views
6

Ich versuche, eine automatische Vervollständigung mit Ajax in MVC5 zu schreiben, aber egal, was ich versuche, bekomme ich den Fehler ungültige JSON primitive. Wenn ich die URL manuell eingeben localhost: 5088/GetData? Inpt = [Abfrage] Ich bin in der Lage, die Rückkehr json zu sehen.MVC 5 ungültige JSON-Primitive

Von dem, was ich online verstehe, gebe ich den Parameter "data:" falsch. Ich habe versucht, sie hineinzulegen. "" Aber es hat nicht funktioniert.

Mein Controller:

public JsonResult GetData(string inpt) 
     { 
      try 
      { 
       var node = //some values here , cause its too long I deleted it 
       foreach (var node in q) 
       { 
        string scity = node.Attribute("CityName").Value.ToUpper(new CultureInfo("tr-TR", false)); 
        string ccity = node.Attribute("CityCode").Value; 
        string ccode = node.Attribute("CountryCode").Value; 
        if (ccity != oldcity) 
        { 
         result.Add(new HavaAlani { SehirAdi = scity, HavaAlaniKodu = ccity, HavaAlaniAdi = scity + ", " + ccode, Sehirmi = true }); 
         oldcity = ccity; 
        } 
        result.Add(new HavaAlani { SehirAdi = scity, HavaAlaniKodu = node.Attribute("Code").Value, HavaAlaniAdi = node.Value, Sehirmi = false }); 
       } 
      } 
      catch 
      { 

      } 

      return Json(result, JsonRequestBehavior.AllowGet); 
     } 
    } 

Mein JS:

$('input.suggestBox').each(function() { 
    //$(this).jsonSuggest(air.Lines); 
    $(this).autocomplete({ 
     source: function (request, response) { 
      $.ajax({ 
       url: "dataAl/GetData", 
       data: { inpt: request.term }, 
       dataType: "json", 
       type: "POST", 
       contentType: "application/json; charset=utf-8", 
       dataFilter: function (data) { return data; }, 
       success: function (data) { 
        response($.map(data.d, function (item) { 
         return { 
          code: item.HavaAlaniKodu, 
          value: item.HavaAlaniAdi, 
          iscity: item.Sehirmi 
         } 
        })) 
       }, 
       error: function (XMLHttpRequest, textStatus, errorThrown) { 
        alert(XMLHttpRequest.responseText); 
       } 
      }); 
     }, 
     minLength: 2 
    }).data("ui-autocomplete")._renderItem = function (ul, item) { 
     var cls = "airport"; 
     if (item.iscity) 
      cls = "city"; 
     return $("<li></li>") 
       .data("item.autocomplete", item) 
       .append("<span class='span-" + cls + "'></span>") 
       .append("<a class='ui-autocomplete-" + cls + "'>" + item.value + " (" + item.code + ")" + "</a>") 
       .appendTo(ul); 
    }; 

}); 
+1

Können Sie ein Beispiel für die zurückgegebene JSON-Datei posten? –

+0

Es gibt JSOn nicht zurück, es gibt Warnung "ungültiges JSOn primitiv: inpt." Aber es gibt den Fehler im HTML-Format innerhalb des Title-Tags des Kopfes –

+0

hmm ... Das ist seltsam, ich dachte, dass dieser bestimmte Fehler mit jquery, nicht MVC entstanden ist. Wenn Sie einen Unterbrechungspunkt in diese Aktion einfügen, scheint dieser Vorgang abgeschlossen zu sein. Wenn nicht, können Sie auch anzeigen, wo das Ergebnis deklariert ist. Versuchen Sie auch, DataType in "Text JSON" oder "Text/JSON" zu ändern –

Antwort

10

Kommentar wurde lange etwas immer so das Hinzufügen dieser als Antwort-

Das erste, was werden würde, um zu versuchen zu modifizieren Ihre Inhaltstyp pro Beitrag: MVC JSON method returning invalid JSON to JQuery?

Versuchen Sie "Anwendung/Json".

wickeln auch Ihr Datenobjekt in

JSON.stringify() 

Wenn das nicht können Sie uns sagen, nicht funktioniert, wo resultiert aus in Ihrer Aktion kommen - ich bin nicht die Erklärung zu sehen. Fügen Sie außerdem einen Haltepunkt hinzu und stellen Sie sicher, dass Sie diese Methode verwenden können.

+0

Nachdem ich einen Haltepunkt in System.Web.MVC.JSONValueProviderFactory gesetzt hatte, stellte ich fest, dass meine 'application/json' POST-Daten von jQuery/ajax url-codiert wurden. Um dies zu verhindern, fügen Sie Ihrer Anfrage die Option 'processData: false' hinzu und nehmen Sie den Ratschlag von @Kelly Gendron entgegen und rufen Sie auch auf Ihrem Objekt auf. MVC sucht nach der Option 'application/json' und erwartet, dass es sich um eine reguläre JSON-Zeichenfolge handelt, die anschließend deserialisiert wird. –

+0

Beispiel: '$ Schnipsel ({ \t Typ: 'POST', \t content: "application/json; charset = utf-8", \t url: 'Ausrüstung/GetData', \t Daten: JSON. stringify ({ \t \t "Start": $ ("# starttime") val(), \t \t "Ende":.. $ ("# endTime") val(), \t \t "name": „name " \t}), \t Prozessdaten: false, \t dataType: 'a pplication/json ' }) ' –