Sudah mendapatkan "parsererror" dari jquery untuk permintaan Ajax, saya telah mencoba mengubah POST menjadi GET, mengembalikan data dalam beberapa cara berbeda (membuat kelas, dll.) Tetapi saya tidak bisa mencari tahu apa masalahnya.
Proyek saya ada di MVC3 dan saya menggunakan jQuery 1.5 Saya memiliki Dropdown dan pada acara pertukaran saya melakukan panggilan untuk mendapatkan beberapa data berdasarkan apa yang dipilih.
Dropdown: (ini memuat "Tampilan" dari daftar di Viewbag dan menjalankan acara dengan baik)
@{
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");
}
});
};
Kode di atas berhasil memanggil metode MVC dan mengembalikan:
[{"ViewContentID":1,"Name":"TopContent","Note":"Content on the top"},
{"ViewContentID":2,"Name":"BottomContent","Note":"Content on the bottom"}]
Tapi jquery menjalankan event error untuk metode $ .ajax () yang mengatakan "parsererror".
Jawaban:
Saya baru-baru ini mengalami masalah ini dan menemukan pertanyaan ini.
Saya mengatasinya dengan cara yang jauh lebih mudah.
Metode Satu
Anda dapat menghapus
dataType: 'json'
properti dari objek literal ...Metode Dua
Atau Anda dapat melakukan apa yang dikatakan @Sagiv dengan mengembalikan data Anda sebagai
Json
.Alasan mengapa
parsererror
pesan ini terjadi adalah ketika Anda hanya mengembalikan string atau nilai lain, itu tidak benar-benarJson
, sehingga parser gagal saat menguraikannya.Jadi, jika Anda menghapus
dataType: json
properti, itu tidak akan mencoba menguraikannya sebagaiJson
.Dengan metode lain jika Anda memastikan untuk mengembalikan data Anda
Json
, parser akan tahu cara menanganinya dengan benar.sumber
dataType
memang!Lihat jawabannya oleh @ david-east untuk cara yang benar dalam menangani masalah ini
Jawaban ini hanya relevan untuk bug dengan jQuery 1.5 saat menggunakan file: protokol.
Saya memiliki masalah yang sama baru-baru ini ketika meningkatkan ke jQuery 1.5. Meskipun mendapatkan respons yang benar, penangan kesalahan menembak. Saya mengatasinya dengan menggunakan
complete
acara dan kemudian memeriksa nilai status. misalnya:sumber
{}
. Malu ini perlu....The JSON data is parsed in a strict manner; any malformed JSON is rejected and a parse error is thrown. As of jQuery 1.9, an empty response is also rejected; the server should return a response of null or {} instead.
api.jquery.com/jQuery.ajaxAnda telah ditentukan respon panggilan ajax dataType sebagai:
dimana sebagai respons ajax sebenarnya bukan JSON yang valid dan sebagai hasilnya parser JSON melempar kesalahan.
Pendekatan terbaik yang saya sarankan adalah untuk mengubah dataType ke:
dan di dalam keberhasilan panggilan balik memvalidasi apakah JSON yang valid sedang dikembalikan atau tidak, dan jika validasi JSON gagal, beri tahu di layar sehingga jelas untuk tujuan apa panggilan ajax sebenarnya gagal. Lihatlah ini:
sumber
masalahnya adalah controller Anda mengembalikan string atau objek lain yang tidak dapat diuraikan. panggilan ajax diharapkan untuk mendapatkan Json sebagai imbalan. coba kembalikan JsonResult di controller seperti itu:
semoga membantu :)
sumber
Data JSON Anda mungkin salah. http://jsonformatter.curiousconcept.com/ untuk memvalidasinya.
sumber
Ada banyak saran untuk dihapus
Meskipun saya akui bahwa ini berfungsi, namun mengabaikan masalah mendasar. Jika Anda yakin string kembali benar-benar JSON, maka cari spasi kosong di awal respons. Pertimbangkan untuk melihatnya di fiddler. Milik saya terlihat seperti ini:
Dalam kasus saya ini adalah masalah dengan PHP memuntahkan karakter yang tidak diinginkan (dalam hal ini file BOM UTF). Setelah saya menghapus ini itu memperbaiki masalah sambil juga menjaga
sumber
Pastikan Anda menghapus kode debug apa pun atau apa pun yang mungkin menghasilkan informasi yang tidak diinginkan. Agak jelas, tetapi mudah dilupakan saat ini.
sumber
Saya tidak tahu apakah ini masih aktual tetapi ada masalah dengan Encoding. Mengubah ke ANSI menyelesaikan masalah untuk saya.
sumber
Jika Anda mendapatkan masalah ini menggunakan HTTP GET di IE saya memecahkan masalah ini dengan mengatur cache: false. Karena saya menggunakan url yang sama untuk permintaan HTML dan json, ia menekan cache alih-alih melakukan panggilan json.
sumber
Anda harus menghapus dataType: "json". Kemudian lihat keajaiban ... alasan melakukan hal seperti itu adalah bahwa Anda mengubah objek json menjadi string sederhana .. jadi json parser tidak dapat mengurai string itu karena tidak menjadi objek json.
sumber
Memetikan Dapatkan operasi dari web .net mvc / api, pastikan Anda diizinkan
sumber
Saya juga mendapatkan "Minta pengembalian dengan kesalahan: parsererror." di konsol javascript. Dalam kasus saya itu bukan masalah Json, tapi saya harus beralih ke area teks tampilan pengkodean yang valid.
sumber
Saya telah mengalami kesalahan seperti itu tetapi setelah memodifikasi respons saya sebelum mengirimnya ke klien itu berfungsi dengan baik.
sumber
Saya memiliki masalah yang sama, ternyata saya
web.config
tidak sama dengan rekan satu tim saya. Jadi tolong periksaweb.config
.Semoga ini bisa membantu seseorang.
sumber
Masalah
window.JSON.parse memunculkan kesalahan pada fungsi $ .parseJSON.
Solusi saya
Overloading JQuery menggunakan alat needsejs .
konten file jquery.overload.js
sumber
Jika Anda tidak ingin menghapus / mengubah
dataType: json
, Anda dapat mengganti penguraian ketat jQuery dengan mendefinisikan sebuah kustomconverter
:Dengan menggunakan ini, Anda dapat menyesuaikan perilaku ketika respons tidak dapat diuraikan sebagai JSON (bahkan jika Anda mendapatkan badan tanggapan yang kosong!)
Dengan konverter kustom ini,
.done()
/success
akan dipicu selama permintaan itu dinyatakan berhasil (kode respons 1xx atau 2xx).sumber