Bir Ajax isteği için jquery'den "parsererror" alıyorum, POST'u GET olarak değiştirmeyi, verileri birkaç farklı şekilde döndürmeyi (sınıflar oluşturma vb.) denedim, ancak sorunun ne olduğunu anlayamıyorum.
Projem MVC3'te ve jQuery 1.5 kullanıyorum Bir Dropdown'um var ve onchange olayında seçilene göre bazı verileri almak için bir çağrı başlatıyorum.
Açılır menü: (bu, Görünüm Çantasındaki listeden "Görünümleri" yükler ve olayı ateşlemek iyi çalışır)
@{
var viewHtmls = new Dictionary<string, object>();
viewHtmls.Add("data-bind", "value: ViewID");
viewHtmls.Add("onchange", "javascript:PageModel.LoadViewContentNames()");
}
@Html.DropDownList("view", (List<SelectListItem>)ViewBag.Views, viewHtmls)
Javascript:
this.LoadViewContentNames = function () {
$.ajax({
url: '/Admin/Ajax/GetViewContentNames',
type: 'POST',
dataType: 'json',
data: { viewID: $("#view").val() },
success: function (data) {
alert(data);
},
error: function (data) {
debugger;
alert("Error");
}
});
};
Yukarıdaki kod MVC yöntemini başarıyla çağırır ve geri döner:
[{"ViewContentID":1,"Name":"TopContent","Note":"Content on the top"},
{"ViewContentID":2,"Name":"BottomContent","Note":"Content on the bottom"}]
Ancak jquery, $.ajax() yöntemi için "parsererror" diyerek hata olayını ateşler.
Yakın zamanda bu sorunla karşılaştım ve bu soruya rastladım.
Bunu çok daha kolay bir yolla çözdüm.
Birinci Yöntem
Ya dataType: 'json'
özelliğini nesne değişmezinden kaldırabilirsiniz...
Yöntem İki
Ya da verilerinizi Json
olarak döndürerek @Sagiv'in söylediğini yapabilirsiniz.
Bu parsererror
mesajının oluşmasının nedeni, basitçe bir dize veya başka bir değer döndürdüğünüzde, bunun gerçekten Json
olmamasıdır, bu nedenle ayrıştırıcı bunu ayrıştırırken başarısız olur.
Yani dataType: json
özelliğini kaldırırsanız, Json
olarak ayrıştırmaya çalışmayacaktır.
Diğer yöntemle, verilerinizi Json
olarak döndürdüğünüzden emin olursanız, ayrıştırıcı bunu nasıl düzgün bir şekilde işleyeceğini bilecektir.
Sorunu ele almanın doğru yolu için @david-east tarafından yazılan cevap'e bakın
Bu yanıt yalnızca şu dosya kullanıldığında jQuery 1.5 ile ilgili bir hata ile ilgilidir: protocol.
Geçenlerde jQuery 1.5'e yükseltirken benzer bir sorun yaşadım. Doğru bir yanıt alınmasına rağmen hata işleyici ateşlendi. Bunu complete
olayını kullanarak ve ardından durum değerini kontrol ederek çözdüm. ör:
complete: function (xhr, status) {
if (status === 'error' || !xhr.responseText) {
handleError();
}
else {
var data = xhr.responseText;
//...
}
}
Sorun, denetleyicinizin string veya ayrıştırılamayan başka bir nesne döndürmesidir. ajax çağrısının karşılığında Json alması bekleniyor. kontrolörde bu şekilde JsonResult döndürmeyi deneyin:
public JsonResult YourAction()
{
...return Json(YourReturnObject);
}
umarım yardımcı olur :)