Ten problem doprowadza mnie do szału już od ponad kilku godzin. Czytałem tak wiele postów i artykułów, że mam niejasne zrozumienie problemu, ale nie przyczyny. Zdaję sobie sprawę, że problem polega na tym, że przesyłam coś takiego jak JSON.parse na obiekt, który jest niezdefiniowany. Nie wiem, dlaczego tak jest. Jestem pewien, że jest to bardzo proste i jestem pewien, że poczuję narzędzie, gdy zostanie to wskazane, ale na razie nie mam nic przeciwko temu, żeby czuć się trochę głupio, jeśli to rozwiąże problem.parseJSON Uncaught SyntaxError: Nieoczekiwany token u
Problem polega na tym, że kiedy przesłać formularz, korzystając z poniższych metod pojawia się następujący błąd:
Uncaught SyntaxError: Unexpected token u js:1
i.extend.parseJSON js:1
c js:1
u js:1
n.extend.showLabel js:1
n.extend.defaultShowErrors js:1
n.extend.showErrors js:1
n.extend.form js:1
n.extend.valid js:1
(anonymous function)
i.event.dispatch js:1
y.handle
Również kiedy przesunąć kursor z pola na pole dostaję ten błąd:
Uncaught SyntaxError: Unexpected token u js:1
i.extend.parseJSON js:1
c js:1
u js:1
n.extend.showLabel js:1
n.extend.defaultShowErrors js:1
n.extend.showErrors js:1
n.extend.element js:1
n.extend.defaults.onfocusout js:1
r js:1
(anonymous function) js:1
i.event.dispatch js:1
y.handle js:1
i.event.trigger js:1
i.event.simulate js:1
f
To oczywiście uniemożliwia wysłanie formularza do kontrolera, który ma zostać przetworzony. Błąd wydaje się być z biblioteki jquery (linia 498), gdy próbuje: return n.JSON.parse (t); (t jest niezdefiniowane). Używam jquery 1.9.1, bootstrap 2.2.2 i jqValidate/1.9.0.unobtrusive.js. Formularz jest w bootstrap modalnym i wygląda następująco:
@model AModelTestApp.Models.UserModel
<div class="modal-header">
<button type="button" class="close" data-dismiss="modal" aria-hidden="true">×</button>
<h3>User</h3>
</div>
<div class="modal-body">
@{
var ajaxOptions = new AjaxOptions
{
HttpMethod = "POST",
OnComplete = "Complete"
};
}
@using (Ajax.BeginForm("EditUser", "Home", ajaxOptions, new { id = "userform" }))
{
<div class="row-fluid">
<div class="span12">
@Html.ValidationSummary("Ooops..", new { id = "validateuser", @class = "alert alert-error" })
</div>
</div>
<div class="row-fluid">
<div class="span6">
@Html.LabelFor(m => m.Id)
@Html.TextBoxFor(m => m.Id)
@Html.LabelFor(m => m.Username)
@Html.TextBoxFor(m => m.Username)
@Html.LabelFor(m => m.FirstName)
@Html.TextBoxFor(m => m.FirstName)
@Html.LabelFor(m => m.LastName)
@Html.TextBoxFor(m => m.LastName)
</div>
<div class="span6">
@Html.LabelFor(m => m.Email)
@Html.TextBoxFor(m => m.Email)
@Html.LabelFor(m => m.UserTypeId)
@Html.TextBoxFor(m => m.UserTypeId)
@Html.LabelFor(m => m.Created)
@Html.TextBoxFor(m => m.Created)
@Html.LabelFor(m => m.Active)
@Html.CheckBoxFor(m => m.Active)
</div>
</div>
<div class="row-fluid">
<div class="span1 offset10">
<a id="btnclear" class="btn" href="#">Clear</a>
</div>
</div>
}
</div>
<div class="modal-footer">
<a class="btn" data-dismiss="modal" href="#">Close</a>
<a id="btnsubmit" class="btn btn-info" href="#">Submit</a>
</div>
<script type="text/javascript">
$.validator.unobtrusive.parse($('#userform'));
$('#btnclear').click(function() {
$('input').val('');
$(':checkbox').prop('checked', false);
return false;
});
$('#btnsubmit').click(function() {
$('#userform').validate();
if ($('#userform').valid()) {
$('#userform').submit();
} else {
alert("Something went wrong with the validation")
}
});
function Complete(result) {
alert("Woooo - " + result);
}
</script>
modalna jest ładowany w sposób następujący:
<div class="row-fluid">
<div class="span12">
<button id="btnclick" class="btn btn-large btn-block btn-primary">Click Me</button>
</div>
</div>
<div id="mainmodal" class="modal hide fade"></div>
<script type="text/javascript">
$('#btnclick').click(function() {
$.ajax({
url: '@Url.Action("GetUser", "Home")',
type: 'GET',
success: function (result) {
//awss.modal.popup(result);
$('#mainmodal').html(result);
$('#mainmodal').modal('show');
}
});
return;
});
</script>
Od tego kontrolera:
public ActionResult GetUser()
{
var user = new UserModel
{
Id = 1,
Username = "sbody",
FirstName = "Some",
LastName = "Body",
Email = "[email protected]",
UserTypeId = 6,
Created = new DateTime(2013, 1, 1),
Active = true
};
return PartialView("EditUser", user);
}
Zarówno ClientValidationEnabled i UnobtrusiveJavaScriptEnabled są włączone w pliku web.config. Mam nadzieję, że to tylko przypadek, gdy patrzę na ten sam problem zbyt długo i nie widzę tego, co oczywiste. Każda pomoc bardzo doceniona. Dzięki :)
dodawania jQuery.przenieś się na swoją listę skryptów, myśl, że powinna ją posortować. – Slicksim
To rzeczywiście zadziałało. Dziękuję Ci. Czy używam tutaj starej techniki, czy też istnieje konflikt, którego nie jestem świadomy? – Tikeb
jquery 1.9+ powoduje problemy z dyskretnymi bibliotekami ajax i walidacyjnymi. pakiet migracji dodaje funkcje, które były dostępne w jQuery 1.8+. – Slicksim