JQuery Ajax Post에서 500개의 내부 서버 오류가 발생함
이 AJAX 투고를 실행하려고 하는데 어떤 이유에서인지 서버 500 에러가 발생합니다.컨트롤러에서 브레이크 포인트에 도달하는 것을 볼 수 있습니다.그래서 문제는 콜백에 있는 것 같습니다.누구라도 있나요?
$.ajax({
type: "POST",
url: "InlineNotes/Note.ashx?id=" + noteid,
data: "{}",
dataType: "json",
success: function(data) {
alert(data[1]);
},
error: function(data){
alert("fail");
}
});
반환되는 문자열은 다음과 같습니다.
{status:'200', text: 'Something'}
서버 메서드가 중단점을 통과한 후 예외를 발생시키고 있는 것 같습니다.Firefox/Firebug 또는 IE8 개발자 도구를 사용하여 서버에서 실제 응답을 확인합니다.예외가 있는 경우 YSOD html이 표시됩니다.이 html을 참조하면 검색 위치를 알 수 있습니다.
하나 더 있습니다. 데이터 속성은 "{}"이(가) 아닌 {}이어야 합니다. 전자는 빈 개체이고 후자는 쿼리 매개 변수로 유효하지 않은 문자열입니다.데이터를 전달하지 않으면 생략하는 것이 좋습니다.
코드 시그니터 프레임워크를 사용하고 있는 경우는, CSRF 보호 설정이 유효하게 되어 있을 가능성이 있습니다.
Ajax 요청을 통해 데이터를 가져오기 위한 Ajax 요청 단순 코드입니다.
$.ajax({
type: "POST",
url: "InlineNotes/Note.ashx",
data: '{"id":"' + noteid+'"}',
contentType: "application/json; charset=utf-8",
dataType: "json",
success: function(data) {
alert(data.d);
},
error: function(data){
alert("fail");
}
});
수 제 그 를 알 수 없었지만, 제 경우에는 그 를 알 수 .POST
로로 합니다.GET
가 사라졌습니다 , 오류가 사라졌습니다!
type:'POST'
유사한 복합 오류가 발생하여 두 가지 해결 방법이 필요했습니다.제 경우 기술 스택은 MVC/ASP였습니다.NET / IIS / JQuery 。서버 측에서 장애가 발생하여 500 에러가 발생했습니다.이 문제는 컨트롤러에 의해 요구가 처리되기 전에 발생하여 서버 측에서의 디버깅이 어려웠습니다.
다음 클라이언트 측 디버깅을 통해 서버 오류를 확인할 수 있습니다.
$.ajax 오류 콜백에서 콘솔에 오류 세부 정보를 표시합니다.
error: (error) => {
console.log(JSON.stringify(error));
}
적어도 초기 서버 오류를 볼 수 있게 되었습니다.
"JSON 요청이 너무 커서 직렬화할 수 없습니다."
이 문제는 클라이언트 web.config에서 해결되었습니다.
<appSettings>
<add key="aspnet:MaxJsonDeserializerMembers" value="150000" />
그러나 요청은 여전히 실패했습니다.그러나 이번에는 서버 측에서 디버깅할 수 있는 다른 오류로 인해
"요청 엔티티가 너무 큽니다."
이 문제는 서비스 web.config에 다음 사항을 추가하여 해결되었습니다.
<configuration>
…
<system.serviceModel>
<bindings>
<basicHttpBinding>
<binding maxBufferSize="2147483647" maxReceivedMessageSize="2147483647" maxBufferPoolSize="524288">
<readerQuotas maxDepth="32" maxStringContentLength="2147483647"
maxArrayLength="2147483647" maxBytesPerRead="2147483647" maxNameTableCharCount="2147483647" />
</binding>
</basicHttpBinding>
</bindings>
설정값에는 추가 조정이 필요할 수 있지만 적어도 ajax post로 인한 서버 오류는 해결되었습니다.
HTTP 상태 코드는 여기서(또는 여기서) 검색할 수 있습니다.이 오류는 다음을 나타냅니다.
"서버에서 예기치 않은 상황이 발생하여 요청을 수행할 수 없습니다."
서버를 디버깅해야 합니다.
나도 오늘 같은 일을 당했어.Firefox용 Firebug를 얻기 전에 설명한 바와 같이 콘솔을 활성화하고 POST 응답을 미리 봅니다.그것은 내가 그 문제가 얼마나 바보 같은지를 알게 하는데 도움이 되었다.액션은 타입 int의 값을 기대하며 스트링을 투고하고 있었습니다.(ASP)NET MVC2)
EventVwr(asp.net에서 경고)에 이벤트가 기록되어야 합니다.이것에 의해, 에러가 발생할 가능성이 있는 장소에 관한 상세한 정보가 표시됩니다.
ASP로부터의 500.NET은 요청을 처리할 때 처리되지 않은 예외가 발생했음을 의미합니다.
웹 서버 프로세스에 디버거를 연결할 것을 권장합니다(액세스 권한이 있다고 가정).
한 가지 이상한 점:서버에 POST 요구를 해도 데이터가 전달되지 않습니다(모든 데이터가 쿼리 문자열에 있습니다).GET 요청으로 해야 하지 않을까요?
또한 URL이 올바른지 다시 확인해야 합니다.
나는 오늘 이 문제에 직면했다.이 에러에서는, 서버로부터 회신이 오지 않기 때문에, 문제를 특정하는 것은 매우 어렵습니다.
단, "500 internal server error"는 클라이언트가 아닌 서버에서 발생한 오류입니다.서버측 스크립트에 오류가 있습니다.코드의 클로징을 코멘트 해, 한번 더 실행해 보면, 어딘가 캐릭터가 없어지고 있는 것을 금방 알 수 있습니다.
호출하는 함수가 웹 서비스의 공용 함수가 아닌 공용 공유 함수로 시작되는 경우에도 VB에서 이 오류가 발생할 수 있습니다.(함수를 클래스 밖으로 이동 또는 복사할 때 발생할 수 있습니다).또 하나 지켜봐야 할 게 있어
이 투고를 수락할 수 있도록 귀하의 메서드의 서명을 게시할 수 있습니까?
또, 다른 이유로 같은 에러 메세지가 표시됩니다.YSOD에서 Null 불가능한 값의 값이 포함되지 않은 사전이 언급되었습니다.YSOD 정보를 얻을 수 있는 방법은 다음과 같이 오류 반환을 처리하는 $.ajax 함수에 브레이크 포인트를 넣는 것이었습니다.
<script type="text/javascript" language="javascript">
function SubmitAjax(url, message, successFunc, errorFunc) {
$.ajax({
type:'POST',
url:url,
data:message,
contentType: 'application/json; charset=utf-8',
dataType: 'json',
success:successFunc,
error:errorFunc
});
};
그러면 나의 errorFunc javascript는 다음과 같습니다.
function(request, textStatus, errorThrown) {
$("#install").text("Error doing auto-installer search, proceed with ticket submission\n"
+request.statusText); }
IE를 사용하여 메뉴 보기 -> 스크립트 디버거 -> 다음 문에서 break으로 이동했습니다.그리고 내 게시물을 띄울 코드를 작동시키러 갔지이 경우 보통 원하는 위치가 아닌 jQuery 라이브러리 내 깊은 곳으로 이동했습니다. 왜냐하면 선택 드롭다운 열기가 jQuery를 트리거했기 때문입니다.그래서 '스텝오버'를 눌렀더니 다음 줄도 끊어졌어요.★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★ 후 그 페이지의 ) 하고, VS를 합니다.$("#install")
오버하여) error(「」, 「TextStatus, error」, 「의 을 표시할 수 있도록 행으로 합니다.던졌습니다. 요청.요청 사항입니다.응답Text texthtml 。
<title>The parameters dictionary contains a null entry for parameter 'appId' of non-nullable type 'System.Int32' for method 'System.Web.Mvc.ContentResult CheckForInstaller(Int32)' in 'HLIT_TicketingMVC.Controllers.TicketController'. An optional parameter must be a reference type, a nullable type, or be declared as an optional parameter.<br>Parameter name: parameters</title>
이 모든 것을 확인하고 컨트롤러 방식 서명을 게시합니다.
나는 내가 이 오류를 가지고 있다는 것을 알았다..htaccess.htaccess.htaccess.htaccess. Well it reroutes ajax calls to ofcourse (물론 Ajax 콜을 재루팅합니다.$.post(../ajax.php)
) 실제 파일을 찾을 수 없습니다.따라서 실제 파일을 찾을 수 없었습니다(오류 500으로 표시).
나는 아약에서 아약 p (를ph'pso ' i배수(디 in ajax다 ajax여ph니 a the by습했에하 it placing리 directoryso토치정렉fixedph.htaccess
영향을 주지 않았어요.영향을 주지 않았습니다).
Chrome 디버거를 사용하여 솔루션을 찾을 수 있었습니다(Firebug나 다른 서드파티 도구가 설치되어 있지 않습니다).
- 개발자 탭으로 이동(CTRL+MAJ+I)
- [ Network ]> [ Preview ]으로 실패한 요구를 클릭합니다.
자기 참조 값을 반환할 때 서버에 문제가 있음을 알 수 있었습니다.
저 같은 경우에는 간단한 문제였지만 찾기가 어려웠습니다.페이지 지시문에 잘못된 상속 특성이 있습니다.최상위 수준만 포함하면 되고 효과가 있었어요.
잘못된 코드
<%@ Page Language="C#" CodeBehind="BusLogic.aspx.cs" Inherits="BusLogic"%>
올바른 코드
<%@ Page Language="C#" CodeBehind="BusLogic.aspx.cs" Inherits="Web.BusLogic" %>
CSRF 보호가 유효하게 되어 있는 CodeIgniter 프레임워크를 사용하는 경우는, Ajax POST 가 발생할 가능성이 있는 모든 페이지에 다음의 스크립트를 로드합니다.
$(function(){
$.ajaxSetup({
data: {
<?php echo $this->config->item('csrf_token_name'); ?>: $.cookie('<?php echo $this->config->item('csrf_cookie_name'); ?>')
}
});
});
필수: jQuery 및 jQuery.cookie 플러그인
출처 : https://stackoverflow.com/a/7154317/2539869 및 http://jerel.co/blog/2012/03/a-simple-solution-to-codeigniter-csrf-protection-and-ajax
서버에 전달할 JSON 데이터의 이름은 클라이언트 측에서 작성하는 것과 같아야 합니다.예:
var obj = { Id: $('#CompanyId').val(),
Name: $("#CompanyName").val()
};
$.Ajax(data: obj,
url: "home/InsertCompany".....
이름이 다를 경우 다음과 같이 입력합니다.
[HttpPost]
public ActionResult InsertCompany(Int32 Id, string WrongName)
{
}
이 에러는 표시됩니다.
데이터를 전달하지 않으면 AJAX 요청에서 데이터 속성을 제거합니다.
이 문제가 발생했는데 서버측 C# 메서드가 스태틱해야 한다는 것을 알게 되었습니다.
클라이언트 측:
$.ajax({
type: "POST",
url: "Default.aspx/ListItem_Selected",
data: "{}",
dataType: "json",
contentType: "application/json; charset=utf-8",
success: ListItemElectionSuccess,
error: ListItemElectionError
});
function ListItemElectionSuccess(data) {
alert([data.d]);
}
function ListItemElectionError(data) {
}
서버측:
public partial class _Default : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
}
[WebMethod]
[ScriptMethod(ResponseFormat = ResponseFormat.Json)]
public static String ListItem_Selected()
{
return "server responce";
}
}
말씀드린 바와 같이 당신의 리턴 스트링 데이터가 매우 길어서 JSON 포맷이 손상되었다고 생각합니다.
이 문제를 해결할 다른 방법이 있습니다.JSON 데이터의 최대 사이즈는 다음과 같이 변경해야 합니다.
웹을 엽니다.컨피규레이션파일을 작성하고, 이러한 행을 설정 섹션에 붙여넣습니다.
<system.web.extensions>
<scripting>
<webServices>
<jsonSerialization maxJsonLength="50000000"/>
</webServices>
</scripting>
</system.web.extensions>
서버 측에서 Try Catch 블록을 사용하여 캐치 블록에서 예외 오류를 클라이언트에 반환합니다.그러면 유용한 오류 메시지가 나타납니다.
나도 같은 문제에 직면했다.여기 두 가지 해결 방법이 있습니다. 1.프레임워크를 사용하고 있는 경우는, ajax 콜과 함께 CSRF 토큰을 송신하고 있는 것을 확인해 주세요.larabel의 구문은 다음과 같습니다.
<meta name="_token" content="{{ csrf_token() }}">
js 파일에서 Ajax 호출을 보내기 전에 이 호출을 해야 합니다.
$.ajaxSetup({
headers: {
'X_CSRF-TOKEN' : $('meta[name="_token"]').attr('content')
}
});
- Another way to solve it would be to change 그것을 해결하는 또 다른 방법은 변화를 주는 것이다.
method
부에서post
로로 합니다.get
저는 요청을 보낸 php 파일에 오류가 있었습니다.데이터베이스 연결에 오류가 발생했습니다.php 코드를 수정한 후 오류가 해결되었습니다.
코드에는 dataType: json이 포함되어 있습니다.
이 경우 jQuery는 응답을 JSON으로 평가하고 JavaScript 개체를 반환합니다.JSON 데이터는 엄밀한 방법으로 해석됩니다.부정한 형식의 JSON은 거부되고 해석 오류가 발생합니다.빈 응답도 거부됩니다.
는 "Drughta"라는해야 합니다.null
★★★★★★★★★★★★★★★★★」{}
★★★★★★ 。
jquery 'on load' 핸들러에서 두 개의 jax 쿼리를 실행했을 때 크롬에서 이 문제가 발생했음을 발견했습니다.
①과 같은 경우,$(function() { $.ajax() ... $.ajax() ... });
다음을 사용하여 피했습니다.
setTimeout(function_to_do_2nd_ajax_request, 1);
아마도 크롬 및/또는 jquery 버그일 것이다.
에 ajax가 있어서 문제가 있었습니다.EnableViewState="false"
★★★★★★★★★★★★★★★★★」EnableViewStateMac="false"
호출된 페이지는 아닙니다.
이걸 두 페이지에 올리자 모든 게 작동하기 시작했어요.MAC 주소의 예외를 보고, 이것을 의심했습니다.
반환 문자열 데이터는 매우 길 수 있습니다.
<system.web>
<compilation debug="true" targetFramework="4.0" />
<httpRuntime maxRequestLength="2147483647" />
</system.web>
예를 들어 다음과 같습니다.
- 1 문자 = 1 바이트
- 5 문자 = 5 바이트
- "Hakki" = 5 바이트
AJAX 코드에서도 "500 internal server error"가 산발적으로 반환되는 유사한 문제가 있었습니다.fast CGI Request Timeout과 액티비티를 늘려 문제를 해결했습니다.타임아웃 값
늦은 감이 있지만 이 문제가 있어서 알게 된 것은 PHP 코드에 오류가 있었다는 것입니다(내 경우 DB에 대한 선택 구문).보통 이 에러 500은 구문을 사용한 것입니다.내 경험으로는.바꿔 말하면, 「피플웨어」의 문제!d
"부정한 형식의 JSON" 응답 외에 실행 중인 쿼리가 데이터 직렬화를 방해하는 개체 또는 기타 항목을 반환할 경우 이 오류가 발생합니다.항상 액션 메서드의 마지막에 JSON이 있고 JSON만 있는지 또는 데이터를 가져오는 방법이 무엇인지 확인해야 합니다.
일반적으로 사용자의 속성이 완전히 올바르지 않거나 서버 처리에 문제가 있습니다.
언급URL : https://stackoverflow.com/questions/1349118/jquery-ajax-post-results-in-500-internal-server-error
'source' 카테고리의 다른 글
jQuery get JSON 결과를 변수에 저장 (0) | 2023.03.26 |
---|---|
특정 페이지에서 특정 J 실행 Wordpress (0) | 2023.03.26 |
JSON Schema 초안 버전4의 "additionalProperties" 키워드에 대해서 (0) | 2023.03.26 |
AngularJs - SELECT의 ng-model (0) | 2023.03.26 |
오픈시프트 디스크 할당량 사용량 해결 (0) | 2023.03.26 |