Ajax 요청에 대해 jquery에서 “parsererror”를 얻은 후 POST를 GET으로 변경하여 몇 가지 다른 방식으로 데이터를 반환하려고 시도했지만 (클래스 생성 등) 문제가 무엇인지 파악할 수 없습니다.
내 프로젝트는 MVC3에 있으며 jQuery 1.5를 사용하고 있습니다. 드롭 다운이 있고 onchange 이벤트에서 선택한 항목을 기반으로 데이터를 가져 오기 위해 호출을 시작합니다.
드롭 다운 : (이것은 Viewbag의 목록에서 “Views”를로드하고 이벤트를 실행하면 정상적으로 작동합니다)
@{
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)
자바 스크립트 :
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");
}
});
};
위의 코드는 MVC 메서드를 성공적으로 호출하고 다음을 반환합니다.
[{"ViewContentID":1,"Name":"TopContent","Note":"Content on the top"},
{"ViewContentID":2,"Name":"BottomContent","Note":"Content on the bottom"}]
그러나 jquery는 “parsererror”라는 $ .ajax () 메소드에 대한 오류 이벤트를 발생시킵니다.
답변
최근 에이 문제가 발생 하여이 질문에 걸려 들었습니다.
훨씬 쉬운 방법으로 해결했습니다.
방법 1
dataType: 'json'
객체 리터럴에서 속성을 제거 할 수 있습니다 …
방법 2
또는 데이터를로 반환하여 @Sagiv가 말한 것을 수행 할 수 있습니다 Json
.
이 parsererror
메시지가 나타나는 이유 는 단순히 문자열이나 다른 값을 반환 할 때 실제로 그렇지 않기 Json
때문에 구문 분석시 구문 분석기가 실패하기 때문입니다.
따라서 dataType: json
속성 을 제거하면 속성을로 구문 분석하지 않습니다 Json
.
다른 방법으로 데이터를로 반환 Json
하면 파서는 데이터를 올바르게 처리하는 방법을 알게됩니다.
답변
문제를 처리하는 올바른 방법은 @ david-east 의 답변 을 참조하십시오.
이 답변은 파일 : 프로토콜을 사용할 때 jQuery 1.5 의 버그 에만 해당됩니다 .
jQuery 1.5로 업그레이드 할 때 최근에 비슷한 문제가 발생했습니다. 올바른 응답을 얻음에도 불구하고 오류 처리기가 시작되었습니다. complete
이벤트 를 사용 하고 상태 값을 확인 하여 문제를 해결했습니다 . 예 :
complete: function (xhr, status) {
if (status === 'error' || !xhr.responseText) {
handleError();
}
else {
var data = xhr.responseText;
//...
}
}
답변
ajax 호출 응답 dataType 을 다음과 같이 지정 했습니다.
‘json’
실제 아약스 응답이 유효한 JSON이 아니기 때문에 JSON 파서에서 오류가 발생합니다.
내가 권장하는 가장 좋은 방법은 dataType 을 다음과 같이 변경하는 것입니다.
‘본문’
성공 콜백 내에서 유효한 JSON이 반환되는지 여부를 확인하고 JSON 유효성 검사에 실패하면 화면에서 경고하여 ajax 호출이 실제로 어떤 목적으로 실패하는지 알 수 있습니다. 이것 좀 봐 :
$.ajax({
url: '/Admin/Ajax/GetViewContentNames',
type: 'POST',
dataType: 'text',
data: {viewID: $("#view").val()},
success: function (data) {
try {
var output = JSON.parse(data);
alert(output);
} catch (e) {
alert("Output is not valid JSON: " + data);
}
}, error: function (request, error) {
alert("AJAX Call Error: " + error);
}
});
답변
문제는 컨트롤러가 구문 분석 할 수없는 문자열이나 다른 객체를 반환한다는 것입니다. ajax 호출은 Json을 반환 할 것으로 예상됩니다. 컨트롤러에서 JsonResult를 다음과 같이 반환하십시오.
public JsonResult YourAction()
{
...return Json(YourReturnObject);
}
그것이 도움이되기를 바랍니다 🙂
답변
JSON 데이터가 잘못되었을 수 있습니다. http://jsonformatter.curiousconcept.com/ 을 확인하십시오.
답변
제거 할 제안이 많이 있습니다
dataType: "json"
이것이 효과가 있음을 인정하지만 근본적인 문제는 무시하고 있습니다. 리턴 문자열이 실제로 JSON이라고 확신하는 경우 응답 시작시 잘못된 공백을 찾으십시오. 피들러에서 살펴보십시오. 광산은 다음과 같습니다.
Connection: Keep-Alive
Content-Type: application/json; charset=utf-8
{"type":"scan","data":{"image":".\/output\/ou...
필자의 경우 이것은 PHP가 원하지 않는 문자 (이 경우 UTF 파일 BOM)를 뿜어내는 문제입니다. 이것을 제거하면 문제를 해결하면서도 문제를 해결했습니다.
dataType: json
답변
의도하지 않은 정보를 출력 할 수있는 디버그 코드 나 그 밖의 것을 제거하십시오. 다소 명백하지만, 순간에 잊기 쉽다.
