JQuery Ajax Post 결과 500 내부 서버 오류 발생


81

이 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'}

.ashx = .NET 플랫폼? 이것이 Java와 어떤 관련이 있습니까?
matt b

$ 기호 또는 ".ajax"앞에 jQuery 접두사없이 올바르게 호출 할 수 있습니까?
Sinan

예 .. jQuery.noConflicts ()를 사용하고 있습니다. 접두사가 정확합니다. 내가 말했듯이. 요청을합니다 .. 오류가 반환됩니다.
Nick

여기에서 게시물을 확인하십시오 developersnote.com/2014/01/…
shamcs

@shamcs의 위 링크에는 끝에 잘못된 문자열이 포함되어 있습니다. 올바른 링크는 developersnote.com/2014/01/…입니다.
Erenor Paz 2016-08-16

답변:


67

중단 점을 통과 한 후 서버 메서드가 예외를 던지고 있다고 생각합니다. Firefox / Firebug 또는 IE8 개발자 도구를 사용하여 서버에서받는 실제 응답을 확인합니다. 예외가있는 경우 YSOD html이 표시되어 어디를 찾아야하는지 파악하는 데 도움이됩니다.

한 가지 더-데이터 속성은 "{}"가 아닌 {}이어야합니다. 전자는 빈 객체이고 후자는 쿼리 매개 변수로 유효하지 않은 문자열입니다. 더 좋은 방법은 데이터를 전달하지 않는 경우에는 그대로 두는 것입니다.


2
첫 번째 문장은 오해의 소지가 있습니다 (500 오류가 클라이언트 측에서 발생 함을 의미 함). 나는 대답을 더 철저히 읽기 전에 거의 당신에게 반대표를 던졌습니다. 좀 더 명확히 해보고 싶을 수도 있습니다.
Macha

4
fiddler2.com 은 서버의 실제 응답을 보는데도 매우 유용합니다.
Glen Little

: o Chrome 개발자 도구가 실제로 부족한 점이 있습니다!
Jimmy

1
실제로 Chrome에서 디버그 할 수 있습니다. 자세한 내용은이 답변을 확인하세요. stackoverflow.com/a/21786593/14533
Pixelomo

33

누군가 codeigniter 프레임 워크를 사용하는 경우 csrf 보호 구성이 활성화되어 문제가 발생할 수 있습니다.


7
몇 분 전에이 문제에 들어갔습니다 ... 귀하의 답변은 나에게 힌트를주었습니다. :) 다른 사람들이 이것을 피하는 것이 흥미로울 수 있습니다. 이것을 데이터에 추가하면 문제가 해결됩니다. <? = $ this-> security-> get_csrf_token_name ()? > : '<? = $ this-> security-> get_csrf_hash ()?>'
soupdiver

감사합니다. Bonfire에서이 문제에 갇혀 있었고 CodeIgniter를 아직 충분히 알지 못해서 알아낼 수있었습니다.
andyface 2013 년

19

이 문제가 발생했습니다. 제 경우에는 그 이유를 찾을 수 없었지만에서 POST로 변경 GET하면 문제 500 오류가 사라졌습니다!

 type:'POST'

9
그러나 실제 해결책은 아닙니다. POST이어야합니다
atilkan 2015 년

2
그것은 완전히 잘못되었습니다. POST를 GET으로 변경하면 실제로 작동하는 경우 처음에는 잘못된 HTTPVerb를 사용하고있는 것입니다. 예를 들어 페이로드를 전송하기 때문에 POST를 사용해야하는 경우 POST를 사용해야하며 GET 사용은 작동하지 않습니다. 반면에 무언가를 얻고 GET을 사용할 수 있다면 POST를 사용하지 말고 GET이 캐시됩니다 (때로는 구성에 따라 다름)
polonskyg

18

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");
    }
});

3
ContentType을 : "응용 프로그램 / JSON; 문자셋 = UTF-8", 나는 다음이 줄을 제거 내 문제가 해결
Taja_100

11

두 가지 해결책이 필요한 유사한 복합 오류가 발생했습니다. 제 경우에는 기술 스택이 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 게시물로 인한 서버 오류를 해결했습니다.


10

여기 (또는 여기 )에서 HTTP 상태 코드를 찾을 수 있습니다 .이 오류는 다음을 알려줍니다.

"서버에 예상치 못한 상황이 발생하여 요청을 이행하지 못했습니다."

서버를 디버그해야합니다.


감사합니다. 작업 파일에서 데이터를 저장하기 위해 데이터베이스에 연결할 수 없으므로 jQuery post (). done ()에 500 오류가 발생했습니다.
Harkály Gergő

8

오늘도 똑같은 일이 발생합니다. Firefox 용 Firebug를 받기 전에 제안한대로 콘솔을 활성화하고 POST 응답을 미리 봅니다. 그 문제가 얼마나 어리석은 지 알아내는 데 도움이되었습니다. 내 행동은 int 유형의 값을 기대하고 있었고 문자열을 게시했습니다. (ASP.NET MVC2)


6

EventVwr (asp.net의 경고)에 기록 된 이벤트가 있어야 오류가 발생할 수있는 위치에 대한 자세한 정보를 제공 할 수 있습니다.


4

ASP.NET의 500은 요청을 처리 할 때 처리되지 않은 예외가 발생했음을 의미합니다.

디버거를 웹 서버 프로세스에 연결하는 것이 좋습니다 (액세스 권한이 있다고 가정).

한 가지 이상한 점 : 서버에 POST 요청을하지만 데이터를 전달하지 않습니다 (모든 것이 쿼리 문자열에 있음). 대신 GET 요청이어야할까요?

또한 URL이 올바른지 다시 확인해야합니다.


맞아요 .. 원래 GET을 사용했지만 같은 오류가 발생합니다.
Nick

1
브라우저 주소 표시 줄에서 요청을 시도해 보셨습니까? 그러면 500 등급을 받습니까?
codeape

3

나는 오늘이 문제에 직면했다. 이런 종류의 오류가 발생하면 서버에서 응답을받지 못하므로 문제를 찾기가 매우 어렵습니다.

하지만 "500 내부 서버 오류"는 클라이언트가 아닌 서버 오류입니다. 서버 측 스크립트에 오류가 있습니다. 클로저로 코드 클로저를 주석 처리하고 다시 실행 해보십시오. 곧 어딘가에서 문자를 놓친다는 것을 알게 될 것입니다.


3

호출하는 함수 가 웹 서비스의 공용 함수 가 아닌 공용 공유 함수로 시작하는 경우 VB에서 해당 오류가 발생할 수도 있습니다 . (클래스에서 함수를 이동하거나 복사하는 경우 발생할 수 있습니다.) 지켜봐야 할 또 다른 것.


2

이 게시물을 수락해야하는 방법의 서명을 게시 할 수 있습니까?

또한 다른 이유로 인해 동일한 오류 메시지가 표시됩니다. 내 YSOD는 nullable이 아닌 값을 포함하지 않는 사전에 대해 이야기했습니다. 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 자바 스크립트는 다음과 같습니다.

function(request, textStatus, errorThrown) {
        $("#install").text("Error doing auto-installer search, proceed with ticket submission\n"
        +request.statusText); }

IE를 사용하여 메뉴보기-> 스크립트 디버거-> 다음 문에서 중단했습니다. 그런 다음 내 게시물을 시작할 코드를 트리거했습니다. 선택 드롭 다운 열기가 jQuery를 트리거했기 때문에 일반적으로 내가 원하는 곳이 아닌 jQuery 라이브러리 내부의 깊은 곳으로 데려갔습니다. 그래서 StepOver를 치면 실제 다음 줄도 끊어져서 제가 원하는 곳이었습니다. 그런 다음 VS가 해당 페이지에 대해 클라이언트 측 (동적) 모드로 $("#install")들어가고 요청, textStatus, errorThrown에있는 내용을 볼 수 있도록 줄을 중단했습니다 (디버깅 위에 마우스를 사용하여). 의뢰. request.ResponseText에서 내가 본 HTML 메시지가 있습니다.

<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>

그래서 모든 것을 확인하고 문제의 일부인 경우 컨트롤러 메서드 서명을 게시하십시오.


2

나는이 오류가 있음을 발견했습니다. 디렉토리에 .htaccess 리디렉션이 구성되어 있습니다. 아약스 호출을 ofcourse ($.post(../ajax.php) ) 하므로 실제 파일을 찾을 수 없습니다 (결과 500 오류).

나는 ajax.php를 디렉토리에 배치하여 '수정'했습니다 (그래서 .htaccess영향을 미치지 않았습니다).


2

Chrome 디버거를 사용하여 솔루션을 찾을 수있었습니다 (Firebug 또는 기타 타사 도구가 설치되어 있지 않음)

  • 개발자 탭으로 이동 (CTRL + MAJ + I)
  • 네트워크 > 실패한 요청을 빨간색으로 클릭> 미리보기

자체 참조 값을 반환 할 때 서버에 문제가 있음을 보여주었습니다.


2

제 경우에는 간단한 문제 였지만 찾기가 어려웠습니다. 페이지 지시문에 잘못된 상속 속성이 있습니다. 최상위 레벨 만 포함하면됩니다.

잘못된 코드

<%@ Page Language="C#" CodeBehind="BusLogic.aspx.cs" Inherits="BusLogic"%>

올바른 코드

<%@ Page Language="C#" CodeBehind="BusLogic.aspx.cs" Inherits="Web.BusLogic" %>

1

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/2539869http://jerel.co/blog/2012/03/a-simple-solution-to-codeigniter-csrf-protection-and-ajax


1

서버에 전달하는 JSON 데이터는 클라이언트 측에서 생성 한 것과 동일한 이름을 가져야합니다. 전의:

var obj = {  Id: $('#CompanyId').val(),
             Name: $("#CompanyName").val()
            };

$.Ajax(data: obj,
url: "home/InsertCompany".....

이름이 다른 경우 예 :

[HttpPost]
public ActionResult InsertCompany(Int32 Id, string WrongName)
{
}

이 오류가 발생합니다.

데이터를 전달하지 않는 경우 AJAX 요청에서 데이터 속성을 제거하십시오.


1

이 문제가 발생하여 서버 측 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 개체 및 속성을 얻는 방법에 대한 예제를 얻을 수 있습니까? 데이터 : {Prop1 : "asdf", Prop2 : "zxcv"}이면 공용 정적 문자열 ListItem_Selected () 함수 내에서 Prop1 및 Prop2 값을 어떻게 얻습니까? 감사.
Mehdi Anis

1

언급했듯이 반환 문자열 데이터가 매우 깁니다. 그래서 JSON 형식이 손상되었습니다.

이 문제에는 다른 방법이 있습니다. 다음과 같이 JSON 데이터의 최대 크기를 변경해야합니다.

Web.Config 파일을 열고이 행을 구성 섹션에 붙여 넣으십시오.

<system.web.extensions>
  <scripting>
    <webServices>
      <jsonSerialization maxJsonLength="50000000"/>
    </webServices>
  </scripting>
</system.web.extensions>

1

나는 또한 같은 문제에 직면했다. 다음은 내가 해결 한 두 가지 방법입니다. 1. 프레임 워크를 사용하는 경우 ajax 호출과 함께 CSRF 토큰도 전송하고 있는지 확인하십시오.

<meta name="_token" content="{{ csrf_token() }}">

js 파일에서 ajax 호출을 보내기 전에 이것을 호출하십시오.

$.ajaxSetup({
            headers: {
                'X_CSRF-TOKEN' : $('meta[name="_token"]').attr('content')
            }
        });
  1. 이를 해결하는 또 다른 방법은에서로 변경 method하는 post것입니다.get

1

나를 위해 오류는 내가 요청을 보내는 PHP 파일에있었습니다. 데이터베이스 연결에 오류가 있습니다. PHP 코드를 수정 한 후 오류가 해결되었습니다.


1

코드에 dataType : json이 포함 됩니다.

이 경우 jQuery는 응답을 JSON으로 평가하고 JavaScript 객체를 반환합니다. JSON의 데이터는 엄격한 방식으로 구문 분석됩니다. 형식이 잘못된 JSON 은 거부되고 구문 분석 오류가 발생합니다. 빈 응답도 거부됩니다.

서버는 null또는 {}대신 응답을 반환해야 합니다.


1

로드시 jquery '에서 두 개의 ajax 쿼리를 수행했을 때 크롬에서 발생했습니다. '핸들러 .

$(function() { $.ajax() ... $.ajax() ... });

다음을 사용하여 피했습니다.

setTimeout(function_to_do_2nd_ajax_request, 1);

아마도 크롬 및 / 또는 jquery 버그 일 것입니다.


1

한에서 페이지 내가 아약스 포스트이라고 때문에이 문제를 가지고 EnableViewState="false"EnableViewStateMac="false" 하지만 페이지를 호출합니다.

이것을 두 페이지에 모두 넣으면 모든 것이 작동하기 시작했습니다. MAC 주소 예외를 보았을 때 이것을 의심했습니다.


0

반환 문자열 데이터는 매우 길 수 있습니다.

<system.web>        
   <compilation debug="true" targetFramework="4.0" />
   <httpRuntime maxRequestLength="2147483647" />
</system.web>

예를 들면 :

  • 1 문자 = 1 바이트
  • 5 문자 = 5 바이트
  • "Hakki"= 5 바이트

0

서버 측에서 Try Catch 블록을 사용하고 catch 블록에서 예외 오류를 클라이언트에 전달합니다. 유용한 오류 메시지가 표시됩니다.


0

산발적으로 "500 내부 서버 오류"를 반환하는 AJAX 코드와 유사한 문제가 발생했습니다. "fastCGI"RequestTimeout 및 ActivityTimeout 값을 늘려 문제를 해결했습니다.


어떤 웹 서버와 관련이 있습니까? 코드를 추가해 주시겠습니까?
Max Leske 2015 년

0

나는 이것에 늦었지만이 문제가 있었고 내가 배운 것은 그것이 내 PHP 코드 (내 경우 db에 대한 선택 구문)의 오류라는 것입니다. 일반적 으로이 오류 500은 내 경험상 구문을 사용하여 수행하는 작업입니다. 즉, "피플웨어"문제! :디


0

"잘못된 형식의 JSON"답변에 추가로, 실행중인 쿼리가 객체 또는 데이터 직렬화를 방해하는 항목을 반환하는 경우이 오류가 발생합니다. 작업 메서드 또는 데이터를 가져 오는 것이 무엇이든 항상 JSON과 JSON 만 있는지 확인해야합니다.


0

일반적으로 귀하의 재산은 서버 처리에 완전히 옳지 않거나 잘못된 것입니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.