Lebih
json parsing error syntax error unexpected end of input
Aku punya potongan kode berikut
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);
}
});
}
Perhatikan bahwa saya sulit dikodekan data nilai. Data-data yang bisa mendorong ke database baik-baik saja. Namun, saya terus mendapatkan kesalahan "parsing error syntax error unexpected end of input". Saya yakin saya data adalah benar JSON sintaks. Ketika aku memeriksa pada Jaringan Chrome inspektur saveProduct permintaan menunjukkan data yang benar.
{ "Name": "AA" }
POSTING ini permintaan tidak memiliki respon. Jadi saya tidak mengerti di mana kesalahan parse adalah berasal dari. Saya mencoba menggunakan browser FireFox. hal yang sama terjadi.
Siapa pun dapat memberikan beberapa ide untuk apa yang salah?
Terima kasih,
P. S. Berikut ini adalah 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();
}
}
}
}
52
7
Saya dapat't mengatakan dengan pasti apa masalahnya. Bisa beberapa karakter buruk, bisa menjadi ruang yang tersisa di awal dan di akhir, tidak ada ide.
Lagi pula, anda tidak't hardcode JSON anda sebagai string seperti yang telah anda lakukan. Bukan cara yang tepat untuk mengirim data JSON ke server menggunakan JSON serializer:
Sekarang pada server juga pastikan bahwa anda memiliki tepat melihat model mengharapkan untuk menerima masukan ini:
dan tindakan yang sesuai:
Sekarang ada's satu hal lagi. Anda telah ditentukan
dataType: 'json'
. Ini berarti bahwa anda berharap bahwa server akan mengembalikan JSON hasil. Controller tindakan harus mengembalikan JSON. Jika anda pengendali aksi kembali pandangan ini bisa menjelaskan kesalahan yang anda dapatkan. It's ketika jQuery upaya untuk mengurai respon dari server:Ini dikatakan, dalam kebanyakan kasus, biasanya anda don't perlu mengatur
dataType
properti ketika membuat permintaan AJAX ke ASP.NET MVC controller tindakan. Alasan untuk ini adalah karena ketika anda kembali beberapa spesifikActionResult
(sepertiViewResult
atauJsonResult
), kerangka kerja ini akan secara otomatis mengatur benarContent-Type
respon HTTP header. jQuery kemudian akan menggunakan header ini untuk mengurai respon dan pakan sebagai parameter keberhasilan callback yang sudah diurai.Saya menduga bahwa masalah yang anda hadapi di sini adalah bahwa server anda tidak't kembali berlaku JSON. Itu baik kembali beberapa ViewResult atau PartialViewResult, atau anda mencoba untuk secara manual kerajinan beberapa patah JSON dalam aksi controller (yang jelas anda tidak harus melakukan tapi menggunakan JsonResult sebaliknya).
Satu hal lagi yang saya perhatikan:
Silakan, menghindari pengaturan ini atribut palsu. Jika anda mengatur atribut ini untuk
palsu
anda adalah pembekuan browser klien selama seluruh pelaksanaan permintaan. Anda bisa membuat permintaan yang normal dalam kasus ini. Jika anda ingin menggunakan AJAX, mulai berpikir dalam kerangka peristiwa asinkron dan callback.Saya menggunakan Node
http
permintaan dan mendengarkandata
acara. Acara ini hanya menempatkan data ke dalam buffer sementara, dan begitu lengkap JSON tidak tersedia. Untuk memperbaiki, masing-masingdata
acara harus ditambahkan ke variabel. Mungkin bisa membantu seseorang (http://nodejs.org/api/http.html).Bagi saya masalah adalah karena tanda kutip tunggal untuk nama/nilai pasangan... data: "{'Nama':'AA'"
Setelah aku berubah ke tanda kutip ganda untuk nama/nilai pasangan itu bekerja dengan baik... data: '{"":"AA"}' atau seperti ini... data: "{\"\":\"AA\""
Mungkin itu akan berguna.
Metode parameter nama harus sama seperti itu memiliki JSON
Ini akan bekerja dengan baik
C#
JS
Ini TIDAK akan bekerja dengan baik
C#
JS
Tak terduga akhir dari masukan berarti bahwa parser telah berakhir sebelum waktunya. Misalnya, mungkin akan mengharapkan
"abcd...wxyz"
tetapi hanya melihat"abcd...wxy
.Ini bisa menjadi typo kesalahan di suatu tempat, atau hal itu bisa menjadi masalah yang anda dapatkan ketika pengkodean dicampur di bagian yang berbeda dari aplikasi.
Salah satu contoh: pertimbangkan anda menerima data dari aplikasi asli menggunakan
chrome.runtime.sendNativeMessage
:Sekarang sebelum panggilan balik anda disebut, browser akan mencoba untuk menguraikan pesan yang menggunakan
JSON.mengurai
yang dapat memberikan anda "tak terduga akhir input" kesalahan jika disediakan byte panjang tidak sesuai dengan data.Saya melakukan ini di Node JS dan memecahkan masalah ini:
spoiler: mungkin Server Side Masalah
Berikut adalah apa yang saya've ditemukan, kode saya diharapkan respon dari server saya, ketika server kembali hanya 200 kode, itu tidak cukup herefrom json parser dilemparkan kesalahan kesalahan yang tak terduga akhir input
fetch(url, { metode: 'POST', tubuh: JSON.stringify(json), header: { 'Content-Type': 'application/json' } }) .kemudian(res => res.json()) // di sini adalah kode saya waites dengan respon dari server .kemudian((res) => { toastr.sukses('Menciptakan Jenis yang dikirim berhasil'); }) .catch(err => { konsol.log('Jenis mengirim gagal', err); toastr.peringatan('Jenis mengirim gagal'); })