MVC 5 invalid JSON primitive
Je suis en train d'écrire une auto-compléter avec de l'ajax dans MVC5 mais peu importe ce que j'essaie, je reçois le message d'erreur invalid JSON primitive.
Quand je rentre manuellement l'url localhost:5088/GetData?l'inpt a=[requête] je suis capable de voir le retour json.
De ce que je comprends en ligne , je donne le "data:" paramètre incorrect. J'ai essayé de les mettre en "" mais il ne fonctionne pas.
Mon Contrôleur :
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);
}
}
Mon 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);
};
});
- Pouvez-vous poster un exemple de l'JSON Retourné?
- Il n'ya pas de retour JSOn , il donne l'avertissement "invalid JSOn primitive:inpt." Mais il donne l'erreur au format html dans le titre tag de la tête
- hmm... C'est étrange, je pensais que l'erreur provenait avec jquery, MVC pas. Si vous placez un point d'arrêt dans cette action, il ne semble pas complète? Si non, peut vous montrer aussi où le résultat est déclaré. Aussi essayer de changer de Type de données de texte "json" ou "text/json"
- Ajouté à répondre - je crois que vous avez besoin de stringify vos données objet.
Vous devez vous connecter pour publier un commentaire.
Commentaire a été un peu long afin d'ajouter cela comme une réponse-
La première chose à faire serait de modifier votre type de contenu par ce post:
MVC JSON méthode retournant invalid JSON de JQuery?
Essayer "application/json".
également placer votre objet de données dans
Si cela ne fonctionne pas pouvez-vous me dire où le résultat est à venir à partir de votre action, je ne vois pas de déclaration. Également ajouter un point de rupture et de s'assurer que vous pouvez accéder à cette méthode.
processData: false
à votre demande et prendre @Kelly Gendron conseils et de l'appel stringify sur votre objet. MVC looks pour l "application/json" et s'attend à ce qu'il soit régulier, une chaîne json qu'elle désérialise.$.ajax({ type : 'POST', contentType : "application/json; charset=utf-8", url : 'equipment/GetData', data : JSON.stringify({ "start" : $("#startTime").val(), "end" : $("#endTime").val(), "name" : "name" }), processData : false, dataType : 'application/json' })