JQuery AjaxPostで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と何の関係がありますか?
マットb

「.ajax」の前に$記号またはjQueryプレフィックスを付けずに正しく呼び出しを行うことは可能ですか?
Sinan

はい..jQuery.noConflicts()を使用しています。プレフィックスは正しいです。私が言ったように。リクエストを行いますが、エラーが返されます。
ニック

ここにポストをチェックdevelopersnote.com/2014/01/...
shamcs

上記の@shamcsからのリンクには、無効にする文字列が最後に含まれています。正しいリンクはdevelopersnote.com/2014/01/…–
Erenor Paz 2016

回答:


68

サーバーメソッドがブレークポイントを通過した後、例外をスローしていると思われます。Firefox / FirebugまたはIE8開発ツールを使用して、サーバーから取得している実際の応答を確認します。例外が発生した場合は、YSOD htmlを取得します。これは、どこを見ればよいかを理解するのに役立ちます。

もう1つ、データプロパティは「{}」ではなく{}である必要があります。前者は空のオブジェクトであり、後者はクエリパラメータとして無効な文字列です。さらに良いことに、データを渡さない場合は省略してください。


2
最初の文は誤解を招く可能性があります(500エラーがクライアント側で発生していることを意味します)。答えをもっと完全に読む前に、私はあなたにほとんど反対票を投じました。少し明確にしたいと思うかもしれません。
マチャ

4
fiddler2.comは、サーバーからの実際の応答を表示するのにも非常に役立ちます。
グレンリトル

:o Chrome Dev Toolsが実際には不十分なものです!
ジミー

1
実際には、詳細については、この答えをチェックし、Chromeでこれをデバッグすることができますstackoverflow.com/a/21786593/14533
Pixelomo

33

誰かがcodeigniterフレームワークを使用している場合、問題はcsrf保護構成が有効になっていることが原因である可能性があります。


7
私は数分前にこの問題に遭遇しました...あなたの答えは私にヒントを与えました:)これを避けるために他の人にとっておそらく興味深いですこれをデータに追加すると問題が解決します:<?= $ this-> security-> get_csrf_token_name()? >: '<?= $ this-> security-> get_csrf_hash()?>'
soupdiver 2012年

ありがとう、Bonfireでこれに行き詰まり、CodeIgniterをまだ十分に理解していない。
andyface 2013年

19

私は自分でこの問題を抱えていましたが、私の場合は理由がわかりませんでしたが、からに変更POSTするGETと、問題500エラーが消えました!

 type:'POST'

10
しかし、実際の解決策ではありません。いくつかのものはPOSTでなければなりません
atilkan 2015

2
それは完全に間違っています。POSTをGETに変更することが実際に機能した場合は、最初に誤ったHTTPVerbを使用していました。ペイロードを送信するなどの理由でPOSTを使用する必要がある場合は、POSTを使用する必要があり、GETの使用は機能しません。一方、何かを取得してGETを使用できる場合は、POSTを使用しないでください
。GET

18

これは、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");
    }
});

3
contentType: "application / json; charset = utf-8"、この行を削除してから問題を解決しました
Taja_100 2016

11

同様の複合エラーが発生し、2つの解決策が必要でした。私の場合、テクノロジースタックは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>

構成値にはさらに調整が必要な場合がありますが、少なくともajaxpostによって引き起こされたサーバーエラーは解決されました。


10

ここ(またはここ)でHTTPステータスコードを検索できます。このエラーは次のことを示しています。

「サーバーで予期しない状態が発生したため、サーバーは要求を実行できませんでした。」

サーバーをデバッグする必要があります。


おかげで、私はこの問題を抱えていました。アクションファイルでデータを保存するためにデータベースに接続できなかったため、jQuery post()。done()で500エラーが発生しました。
–HarkályGergő 2016

8

今日も同じことが起こります。Firefox用のFirebugを入手する前に提案したように、コンソールを有効にしてPOST応答をプレビューします。それは私が問題がどれほど愚かであったかを知るのを助けました。私のアクションはint型の値を期待していて、文字列を投稿していました。(ASP.NET MVC2)


6

EventVwr(asp.netからの警告)にイベントが記録されているはずです。これにより、エラーが発生する可能性のある場所の詳細がわかります。


4

ASP.NETの500は、要求を処理するときに、ある時点で未処理の例外がスローされたことを意味している可能性があります。

Webサーバープロセスにデバッガーをアタッチすることをお勧めします(アクセスできる場合)。

奇妙なことに、サーバーにPOSTリクエストを送信しましたが、データを渡しません(すべてがクエリ文字列に含まれています)。おそらく、代わりにGETリクエストである必要がありますか?

また、URLが正しいことを再確認する必要があります。


そうです。元々GETを使用していましたが、同じエラーが発生します。
ニック

1
ブラウザのアドレスバーからリクエストを実行してみましたか?その時も500のステータスを取得しますか?
codeape 2009

3

私は今日この問題に直面しています。この種のエラーでは、サーバーから応答が得られないため、問題を特定するのは非常に困難です。

しかし、「500内部サーバーエラー」はクライアントではなくサーバーでのエラーであり、サーバー側スクリプトでエラーが発生したと言えます。クロージャごとにコードクロージャをコメントアウトして、もう一度実行してみてください。すぐに、どこかで文字が欠落していることがわかります。


3

呼び出している関数がWebサービスのパブリック関数ではなくパブリック共有関数で始まる場合にも、VBでこのエラーが発生する可能性があります。(関数をクラスから移動またはコピーした場合に発生する可能性があります)。注意すべきもう1つのこと。


2

この投稿を受け入れることになっているメソッドの署名を投稿できますか?

さらに、おそらく別の理由で、同じエラーメッセージが表示されます。私の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
        });

};

次に、私のerrorFuncjavascriptは次のようになります。

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

IEを使用して、[表示]メニュー-> [スクリプトデバッガー]-> [次のステートメントで中断]に移動しました。次に、私の投稿を起動するコードをトリガーしました。選択ドロップダウンを開くとjQueryがトリガーされるため、これは通常、必要な場所ではなく、jQueryのライブラリの奥深くに移動しました。それで、StepOverを押すと、実際の次の行も壊れてしまい、それが私が望んでいた場所でした。次に、VSはそのページのクライアント側(動的)モードに入り、$("#install")行を中断して、(マウスオーバーデバッグを使用して)request、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リダイレクトを設定しました。まあそれはもちろんajax呼び出しを再ルーティングします($.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フレームワークを使用する場合は、ajaxPOSTが発生する可能性のあるすべてのページに次のスクリプトをロードします。

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


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"}の場合、public static String ListItem_Selected()関数内でProp1とProp2の値を取得するにはどうすればよいですか?ありがとう。
MehdiAnis19年

1

前述のように、戻り文字列データは非常に長いと思います。そのため、JSON形式が破損しています。

この問題には他の方法があります。JSONデータの最大サイズは次のように変更する必要があります。

Web.Configファイルを開き、これらの行を構成セクションに貼り付けます

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

1

私も同じ問題に直面しました。これが私がそれを解決した2つの方法です-1。フレームワークを使用している場合は、ajax呼び出しでもCSRFトークンを送信していることを確認してくださいlaravelの構文は次のようになります-

<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で2つのajaxクエリを実行したときにこれがchromeで発生したことがわかりました 'ハンドラーで。

すなわちのように $(function() { $.ajax() ... $.ajax() ... });

私はそれを使用して回避しました:

setTimeout(function_to_do_2nd_ajax_request, 1);

おそらくchromeやjqueryのバグです


1

ページは、私が持っていたから、AJAXポストと呼ばれるので、私はこの問題を抱えていたEnableViewState="false"し、EnableViewStateMac="false"はなく、ページが呼び出されます。

これを両方のページに置くと、すべてが機能し始めました。MACアドレスの例外を見たとき、私はこれを疑った。


0

戻り文字列データは非常に長くなる可能性があります。

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

例えば:

  • 1文字= 1バイト
  • 5文字= 5バイト
  • 「ハッキ」= 5バイト

0

サーバー側でTryCatchブロックを使用し、catchブロックで例外エラーをクライアントに返します。これにより、役立つエラーメッセージが表示されます。


0

「500内部サーバーエラー」を散発的に返すAJAXコードで同様の問題が発生しました。「fastCGI」のRequestTimeout値とActivityTimeout値を増やすことで、問題を解決しました。


それはどのWebサーバーに関係しますか?コードを追加していただけませんか?
Max Leske 2015年

0

私はこれに遅れていますが、私はこの問題を抱えていました、そして私が学んだことはそれが私のPHPコード(私の場合はdbへのselectの構文)のエラーであったということでした。通常、このエラー500は、私の経験では、構文を使用して行うものです。言い換えれば、「ピープルウェア」の問題です!:D


0

「不正な形式のJSON」の回答に加えて、実行中のクエリがオブジェクトまたはデータのシリアル化を妨げるものを返す場合、このエラーが発生します。アクションメソッドの最後、またはデータを取得する対象が何であれ、JSONがあり、JSONのみであることを常に確認する必要があります。


0

通常、プロパティは完全に正しくないか、サーバーの処理に問題があります。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.