私は仕事でこのプロジェクトのために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;
}
さらにコードが必要な場合はお知らせください。
返される文字列データは非常に長いと思います。そのため、JSON形式が破損しています。この方法でJSONデータの最大サイズを変更する必要があります。
Web.Configファイルを開き、これらの行を構成セクションに貼り付けます
<system.web.extensions>
<scripting>
<webServices>
<jsonSerialization maxJsonLength="50000000"/>
</webServices>
</scripting>
</system.web.extensions>
これは、SOAP呼び出し;の誤ったパラメーターである可能性があります。'data: 'jsonセクションのパラメーターの形式を確認してください-これは、渡すペイロードです-パラメーターJSON形式でラップされたデータ。
Google Chromeのデバッグツールバーには、パラメータを確認してエラーメッセージを確認するための優れたツールがあります。たとえば、[コンソール]タブから開始し、エラーのあるURLをクリックするか、ネットワークタブをクリックします。メッセージのヘッダー、応答などを表示する必要があります...
次の行のコメントを解除します:[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
{
同じ問題を抱えていたので、セキュリティ上の理由から、ASPは、サイト/サービスにリモートでアクセスするときに、.asmx
ウェブサービスをリモートで使用しているため、サーバーにリモート接続して開発ツールを監視したところ、「ファイルまたはアセンブリをロードできませんでした'Newtonsoft.Json, Version=3.5.0.0, Culture=neutral, PublicKeyToken=30ad4fe6b2a6aeed'
またはその依存関係の1つ...」。
サーバーにログオンし、そこからデバッグします。
投稿でbehavior: JsonRequestBehavior.AllowGet
を使用する必要がありますC#でJson Return
このようなエラーを修正し、routes.phpのルートの場所を変更しました。たとえば、次のようなものがありました。
Route::resource('Mensajes', 'MensajeriaController');
Route::get('Mensajes/modificar', 'MensajeriaController@modificarEstado');
そして、私はこのようにそれを置きます:
Route::get('Mensajes/modificar', 'MensajeriaController@modificarEstado');
Route::resource('Mensajes', 'MensajeriaController');
同じエラーが発生しました。原因は、バックエンドメソッドが異なる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呼び出し内のデータ変数を変更する必要がありました。