1

jQuery(v 1.7.2)を使用してASP.NET(v 2.0.50727)Webサービスに対してajax呼び出しを行うモバイルデバイス用のWebサイトを開発しています。

呼び出しは約95%の時間で正しく機能しますが、ランダムに失敗し、500の内部サーバーエラーが返されます。コードの最初の行が実行される前に、サーバー側で失敗します(最初の行はイベントログに書き込みます)。

私が覚えているデスクトップブラウザを使用して呼び出しが失敗するのを見たことがありませんが、iPadを使用すると十分に失敗するのを見ました。追加した

<browserCaps userAgentCacheKeyLength="256">

Webサービスのweb.configファイルに追加しましたが、それは役に立ちませんでした。

javascript:

$.ajax({
  type: "POST",
  url: serverURL + "/getImage",
  data: '{"formURL":"' + url + '", "rowNumber":"'+rowNumber+'"}',
  contentType: "application/json; charset=utf-8",
  dataType: "json",
  success: function (msg,textStatus, jqXHR) {
    ...
  }, error: function(xhr, ajaxOptions, thrownError) {
    ...
  }
}).done(function(){
  console.log("getImage call is done");
});

Webサービスに渡されるデータの例:

'{"formURL":"fileName.xml", "rowNumber":"1"}'

c#

[WebMethod(EnableSession = true)]
[ScriptMethod(ResponseFormat = ResponseFormat.Json)]
public string getImage(string formURL, string rowNumber) {
  log("Retrieving image of form " + formURL);
  string image = "";
  string username = /*retrieve username*/;
  string password = /*retrieve password*/;
  if (username != null && username != "") {
    image = /*code to retrieve the image*/;
  }
  return image;
}

private void log(string message) {
  EvLog.WriteToEventLog(DateTime.Now.ToString("MM:dd:yyyy H:mm:ss:fff") + Environment.NewLine + message, 10);
}

私が少し助けてくれたのは、Webサービスからの応答ヘッダーに「jsonerror:true」が含まれているために呼び出しが失敗したときだけですが、ランダムに失敗する理由を特定することはできませんでした。

どんな助けでも大歓迎です!

4

2 に答える 2

0

この方法でデータを構築しないでください

data: '{"formURL":"' + url + '", "rowNumber":"'+rowNumber+'"}',

不正な JSON 文字列が発生する可能性があります。

この代わりに、JSON.stringify メソッドを使用して JavaScript オブジェクトを文字列化します。

data: JSON.stringify({formUrl: url, rowNumber: rowNumber}),

JSON.stringify は、オブジェクトを有効な JSON 文字列として表現するためのすべての仕事を行います。

于 2012-08-14T18:28:51.970 に答える
0

本当に JSON エラーであると仮定すると、最初に考えたのは、パラメーターに渡されるデータが正しくないということです。

次の行は、変数の内容を引用しています。これは、コード内の別の場所からロードされていると思います。

data: '{"formURL":"' + url + '", "rowNumber":"'+rowNumber+'"}',

rowNumber が整数値であり、それを壊さないことをすでに確認していると仮定すると、'url' 変数が JSON 形式を壊している可能性があります。これが発生する最も簡単な方法は、ファイル名にエスケープされていない引用符がある場合です。特に、連結されたときにパラメーター値が予想よりも早く閉じられている場合です。

文字セットに対して有効でない文字の可能性は常にあります。失敗を引き起こすサンプルデータはありますか? 提供された例は素晴らしくきれいに見えるので、エラーケースの1つではなかったと思います.

于 2012-08-14T18:25:10.800 に答える