JSON Parsing Fehler Syntax Fehler unerwartetes Ende der Eingabe
Bekam ich das folgende Stück code
function pushJsonData(productName) {
$.ajax({
url: "/knockout/SaveProduct",
type: "POST",
contentType: "application/json",
dataType: "json",
data: " { \"Name\" : \"AA\" } ",
async: false,
success: function () {
loadJsonData();
},
error: function (jqXHR, textStatus, errorThrown) {
alert(textStatus + " in pushJsonData: " + errorThrown + " " + jqXHR);
}
});
}
Beachten Sie, dass ich hart codiert die Daten Wert. Die Daten geschoben bekommen in der Datenbank in Ordnung. Aber, ich erhalte die Fehlermeldung "parsing-error syntax error unexpected end of input". Ich bin sicher, dass meine Daten in der korrekten JSON-syntax. Wenn ich kontrolliert mit am Netzwerk der Chrome inspector der saveProduct Anfrage zeigten, dass die Daten korrekt sind.
{ "Name": "AA" }
Diese POST-Anforderung hat keine Antwort. Also ich bin ratlos, wo der parse-error kommt. Ich habe versucht, mit FireFox-browser. das gleiche passierte.
Kann jemand geben einige Idee, was falsch ist?
Dank,
P. S.
Hier ist der controller-code
namespace MvcApplJSON.Controllers
{
public class KnockoutController : Controller
{
//
//GET: /Knockout/
public ActionResult Index()
{
return View();
}
[HttpGet]
public JsonResult GetProductList()
{
var model = new List<Product>();
try
{
using (var db = new KOEntities())
{
var product = from p in db.Products orderby p.Name select p;
model = product.ToList();
}
}
catch (Exception ex)
{ throw ex; }
return Json(model, JsonRequestBehavior.AllowGet);
}
[HttpPost]
public void SaveProduct (Product product)
{
using (var db = new KOEntities())
{
db.Products.Add(new Product { Name = product.Name, DateCreated = DateTime.Now });
db.SaveChanges();
}
}
}
}
InformationsquelleAutor der Frage Shawn | 2013-12-29
Du musst angemeldet sein, um einen Kommentar abzugeben.
Kann nicht sicher sagen, was das problem ist. Könnte einige schlechten Charakter, könnte die Räume, die Sie hinterlassen haben, am Anfang und am Ende, keine Ahnung.
Trotzdem sollten Sie absolut nie hardcoding Ihre JSON-strings, wie Sie es Tat. Anstatt den richtigen Weg zu schicken JSON-Daten an den server ist die Verwendung eines JSON-serializer:
Nun auf dem server auch stellen Sie sicher, dass Sie die richtige view-Modell erwarten, diese zu empfangen-Eingang:
und die entsprechende Aktion:
Nun gibt es eine weitere Sache. Sie haben angegeben
dataType: 'json'
. Dies bedeutet, dass Sie erwarten, dass der server wieder eine JSON-Ergebnis. Die controller-Aktion, muss die JSON zurückgeben. Wenn der controller-Aktion wieder einen Blick dies könnte erklären, die Fehler, die Sie bekommen. Es ist, wenn jQuery versucht, die zum analysieren der Antwort vom server:Diesem wird gesagt, in den meisten casesusually Sie nicht brauchen, um die Einstellung der
dataType
- Eigenschaft, wenn die Bereitstellung von AJAX-Anfrage an ein ASP.NET MVC-controller-action. Der Grund für dieses ist, weil, wenn Sie wieder einige spezifische ActionResult (wie ein ViewResult oder ein JsonResult), wird der Rahmen automatisch korrigierenContent-Type
Antwort-HTTP-header. jQuery wird, dann verwenden Sie diesen header, um eine Analyse der Reaktion und führen Sie es als parameter für den Erfolg der Rückruf bereits analysiert.Ich vermute, dass das problem hier ist, dass Ihr server nicht zurück gültiges JSON. Es entweder wieder einige ViewResult oder eine PartialViewResult, oder Sie haben versucht, manuell Handwerk einige gebrochene JSON in einer controller-action (die natürlich sollte man nie tun, sondern mit der JsonResult statt).
Ohhhh, und eine weitere Sache, die ich gerade bemerkt, dass meine Augen Bluten:
Ernst? Bitte, NIE IMMER NIE setzen Sie dieses Attribut auf false. Ich sehe Menschen, tun dies immer und immer und immer und immer wieder. Es ist empörend. Jungs, wenn Sie dieses Attribut setzen, um
false
Sie nicht mehr tun, AJAX. Sie sperren/einfrieren des client-Browsers während der gesamten Ausführung der Anforderung töten alle Vorteile, die AJAX gibt Sie. Stellen Sie nur eine normale Anfrage in diesem Fall. Kümmern Sie sich nicht mit javascript. Wenn Sie wollen, zu tun, AJAX, dann aufhören zu denken, in Bezug auf die prozeduralen und sequentielle Programmierung. Start denken in Bezug auf asynchrone Ereignisse und callbacks.InformationsquelleAutor der Antwort Darin Dimitrov
War ich mit einem Knoten
http
Anfrage und hören für diedata
Veranstaltung. Dieses Ereignis stellt nur die Daten in einen Puffer vorübergehend, und so eine komplette JSON nicht verfügbar. Zu beheben, jededata
Ereignis angefügt werden muss, um eine variable. Könnte jemand helfen (http://nodejs.org/api/http.html).InformationsquelleAutor der Antwort Ben
Für mich war das Thema durch einfache Anführungszeichen für die name/Wert-paar...
Daten: "{'Name':'AA'}"
Sobald ich es geändert doppelten Anführungszeichen für die name/Wert-paar, das es funktioniert...
data: '{"Name":"AA"}'
oder so...
Daten: "{\"Name\":\"AA\"}"
InformationsquelleAutor der Antwort Vish
Versuchen, einzelne Zitate,
InformationsquelleAutor der Antwort Rajaprabhu Aravindasamy
Unerwartetes Ende der Eingabe bedeutet, dass der parser hat, vorzeitig beendet. Beispielsweise könnte es sein, erwarten
"abcd...wxyz"
aber sieht nur"abcd...wxy
.Kann dies eine Tippfehler Fehler irgendwo, oder es könnte ein problem bekommen Sie, wenn Codierungen sind gemischt in verschiedenen teilen der Anwendung.
Einem Beispiel: betrachten Sie den Empfang von Daten von einer nativen app mit
chrome.runtime.sendNativeMessage
:Nun vor dein callback aufgerufen wird, wird der browser versuchen würde, parse die Nachricht mit
JSON.parse
geben Sie "unexpected end of input" - Fehler auf, wenn die geliefert byte Länge nicht den Daten entsprechen.InformationsquelleAutor der Antwort Pacerier
Ich Tat dies, und es löste dieses problem.
var data = JSON.parse(Buffer.concat(arr).toString());
PS: In Node JS
InformationsquelleAutor der Antwort Victor Michael Kosgei