web-dev-qa-db-ja.com

Ajax-500内部サーバーエラー

私は仕事でこのプロジェクトのためにAJAXを学ぼうとしています。患者が服用している薬をロードするサイトがあります。

私はこれをAJAX関数を再帰的に呼び出して、単一の薬剤と7日間の履歴を含む新しいテーブルを追加します。コードをFFとIEで実行するのに問題があります。クロムで完全に問題ありません。xmlhttp.statusを表示するアラートがあり、これは私が得たものです:

xmlhttp.status == 500(内部サーバーエラー)。

私はすべての再帰をコメントアウトしたので、このちょっとしたコードに絞り込まれます。 (xは医薬品の数を追跡するため、いつ停止するかがわかります)

function LoadMeds()


  if ( x == MaxMedCount )
  {
      document.getElementById("the_day").value = parseInt(document.getElementById("the_day").value)+7; 
  }
  if ( x == (MaxMedCount - 1) )
  {
      document.getElementById("x").value = x + 1;
      show();
  }
  else
  { 

      if (window.XMLHttpRequest)
      {// code for IE7+, Firefox, Chrome, Opera, Safari
          xmlhttp=new XMLHttpRequest();
      }
      else
      {// code for IE6, IE5
          xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
      }
      xmlhttp.onreadystatechange=function()
      {
          try 
          {      
              if (xmlhttp.readyState==4 && xmlhttp.status==200)
              {     
                  var div = document.createElement('div');
                  div.innerHTML= xmlhttp.responseText;
                  document.getElementById('MedTable').appendChild(div);
                  document.getElementById("the_med_").value = the_med_;

              }

          }
          catch(e)
          {
              alert("Error");  
          }
      }
      xmlhttp.open("GET","URL with variables passed",true);
      xmlhttp.send();     
      document.getElementById("x").value = x + 1;
  } 

さらにコードが必要な場合はお知らせください。

25
NickF

500 (internal server error)は、サーバー側で問題が発生したことを意味します。それはいくつかの可能性がありますが、URLとパラメーターが正しいことを確認することから始めます。また、リクエストを処理するものはすべて、リクエストをPOSTではなくGETとして期待していることを確認してください。

何が起こっているのかを知るための便利な方法の1つは、 Fiddler のようなツールを使用することです。 。

独自のAjaxコードを記述する説得力のある理由がない場合は、Ajaxの対話を処理するライブラリを使用する方がはるかに良いでしょう。 jQuery は1つのオプションです。

51
Jonathon Faust

返される文字列データは非常に長いと思います。そのため、JSON形式が破損しています。この方法でJSONデータの最大サイズを変更する必要があります。

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

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

これは、SOAP呼び出し;の誤ったパラメーターである可能性があります。'data: 'jsonセクションのパラメーターの形式を確認してください-これは、渡すペイロードです-パラメーターJSON形式でラップされたデータ。

Google Chromeのデバッグツールバーには、パラメータを確認してエラーメッセージを確認するための優れたツールがあります。たとえば、[コンソール]タブから開始し、エラーのあるURLをクリックするか、ネットワークタブをクリックします。メッセージのヘッダー、応答などを表示する必要があります...

6
user14114

次の行のコメントを解除します:[System.Web.Script.Services.ScriptService]

サービスは正常に動作し始めます。

[WebService(Namespace = "http://tempuri.org/")]


 [WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]


ASP.NET AJAXを使用して、このWebサービスをスクリプトから呼び出せるようにするには、次の行のコメントを解除します。

[System.Web.Script.Services.ScriptService]

public class WebService : System.Web.Services.WebService 
{
2
Nadir Siddiqui

同じ問題を抱えていたので、セキュリティ上の理由から、ASPは、サイト/サービスにリモートでアクセスするときに、.asmxウェブサービスをリモートで使用しているため、サーバーにリモート接続して開発ツールを監視したところ、「ファイルまたはアセンブリをロードできませんでした'Newtonsoft.Json, Version=3.5.0.0, Culture=neutral, PublicKeyToken=30ad4fe6b2a6aeed'またはその依存関係の1つ...」。

サーバーにログオンし、そこからデバッグします。

1
user2351772

投稿でbehavior: JsonRequestBehavior.AllowGetを使用する必要がありますC#でJson Return

0
Muhammad Yasir

このようなエラーを修正し、routes.phpのルートの場所を変更しました。たとえば、次のようなものがありました。

Route::resource('Mensajes', 'MensajeriaController');
Route::get('Mensajes/modificar', 'MensajeriaController@modificarEstado');

そして、私はこのようにそれを置きます:

Route::get('Mensajes/modificar', 'MensajeriaController@modificarEstado');
Route::resource('Mensajes', 'MensajeriaController');
0
Jennifervdz

同じエラーが発生しました。原因は、バックエンドメソッドが異なるJSONデータを予期していたことが原因であることがわかりました。私のAjaxコールでは、次のようなものがありました。

$.ajax({
        async: false,
        type: "POST",
        url: "http://13.82.13.196/api.aspx/PostAjax",
        data: '{"url":"test"}',
        contentType: "application/json; charset=utf-8",
        dataType: "json",
    });

これで、私のWebMethodで、C#バックエンドコード内で、次のようにエンドポイントを宣言しました。

public static string PostAjax(AjaxSettings settings)

AjaxSettingsが宣言された場所:

public class AjaxSettings
{
    public string url { get; set; }
}

問題は、ajax呼び出しとバックエンドエンドポイント間のマッピングが同じではないことでした。 ajax呼び出しを次のように変更するとすぐに、すべてうまくいきました!

var data ='{"url":"test"}';    
$.ajax({
    async: false,
    type: "POST",
    url: "http://13.82.13.196/api.aspx/PostAjax",
    data: '{"settings":'+data+'}',
    contentType: "application/json; charset=utf-8",
    dataType: "json"
});

メソッドのシグネチャを正確に一致させるには、Ajax呼び出し内のデータ変数を変更する必要がありました。

0