3

ヘッダーなしで応答コンテンツ (本文のみ) を抽出するにはどうすればよいですか?

$.ajax({ 
   type: "GET",
   url: "http://myRestservice.domain.com",
   success: function(data, textStatus, request){
        alert(data); //This prints the response with the header.

   },
   error: function(){
     alert('fail');

   }
  });

上記のコードが出力されます

HTTP/1.1 200 OK
Cache-Control: private, max-age=0
Content-Type: text/xml; charset=utf-8
Server: Microsoft-IIS/7.5
X-AspNet-Version: 4.0.30319
X-Powered-By: ASP.NET
Date: Fri, 12 Jul 2013 20:24:06 GMT
Content-Length: 232

    <?xml version="1.0" encoding="utf-8"?>
    <string xmlns="http://tempuri.org/">{"UserID":3,"RoleID":8,"ActivityID":3,"RoleIName":"E",,"Duration":10,"ValidationMsg":"Passed"}</string>

ValidationMsg の値を抽出する必要があります。レストサービスコールです。

ヘッダー情報なしで応答を取得するにはどうすればよいですか?

4

3 に答える 3

4

あなたのサーバーは、予期しないコンテンツ タイプを配信していると思います。

解決する手順:

  • Chrome の開発者ツールでネットワーク タブを開き、リクエストが発生するのを見て、それがどのようなコンテンツ タイプとして配信されているかを確認します。きっと、text/plainまたはのようなものtext/htmlです。
  • JSON の場合、サーバーは として配信する必要がありますapplication/json
  • ajax リクエストはdataType「json」として指定する必要があります。通常、$.ajax は適切に推測します。ただし、サーバーは何らかのテキストであると主張しているため、応答でヘッダーを取得しています。
于 2013-07-15T18:55:43.603 に答える
2

dataパラメーターでヘッダーを取得している場合は、サーバー コードに問題があると思われます。あなたが提供したコードは、有効な XML を返すテスト サーバーに接続するのに問題なく機能します。データパラメータには、最終的に XML ドキュメント オブジェクトが含まれます。

ブラウザでその URL を開いて、返される内容を確認することをお勧めします。また、XML がサーバー上でプログラムによって生成されている場合は、代わりに静的 XML ファイルを作成してみて、それがうまく機能するかどうかを確認できます。

サーバーが有効な XML を返すようになったら、次のようにdataパラメータで XML オブジェクトから文字列コンテンツを抽出できます。

var stringContent = $(data).text();

次に、その文字列コンテンツから JSON を解析できます。

var json = $.parseJSON(stringContent);

最後に、validationMessageキーを次のように抽出します。

var validationMessage = json.ValidationMsg;

これは、その文字列要素の JSON が有効な json であると想定しています。ただし、指定した例では、「RoleIName」と「Duration」の間に二重のコンマがあり、無効になっています。

サーバー側でそれを修正できない場合は、次のような単純な文字列置換を使用してクライアント側で修正できる可能性があります。

stringContent = stringContent.replace(',,', ',');

これは一般的に特に安全なことではありませんが、そのような呼び出しによって破損する可能性のある json コンテンツにコンマが含まれていることを心配していなければ、問題にはなりません。

すべてをまとめると、最終的な成功関数は次のようになります。

success: function(data, textStatus, request){
   var stringContent = $(data).text();
   stringContent = stringContent.replace(',,', ',');
   var json = $.parseJSON(stringContent);
   var validationMessage = json.ValidationMsg;
   /* do whatever you need with the validationMessage here */
},

これは、動作するスクリプトを示す codepen リンクです: http://codepen.io/anon/pen/LeDlg

于 2013-07-15T18:08:27.870 に答える