2012-03-28 15 views
2

Webサービスを呼び出す必要があるアプリケーション内にWebページがあり、オブジェクトのリストを返すように設定しました。この呼び出しは、同じように設定されているので、ASP.NET JQuery AJAX POSTはデータを返しますが、401の応答内にあります

$(document).ready(function() { 
    var response = $.ajax({ 
     type: 'POST', 
     contentType: 'application/json; charset=utf-8', 
     url: '/Ajax/service.asmx/GetObjects' 
    }); 

    response.success(function(data) { 
     $('#bodyText').html(data); 
    }); 

    response.complete(function() { 
     alert('ajax complete'); 
    }); 

}); 

私のサービスは、私はHTTPヘッダが送信された後Serverは、ヘッダーを追加することはできません、次のエラーを取得しています。この

namespace AjaxTest.Ajax 
{ 
    #region 
using System.ComponentModel; 
using System.Web.Script.Serialization; 
using System.Web.Script.Services; 
using System.Web.Services; 

#endregion 

/// <summary> 
/// Summary for boat 
/// </summary> 
[WebService(Namespace = "http://quality/")] 
[WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)] 
[System.Web.Script.Services.ScriptService] 
public class Boat : WebService 
{ 
    #region Public Methods and Operators 

    /// <summary> 
    /// The Get Models method. 
    /// </summary> 
    [WebMethod] 
    [ScriptMethod(ResponseFormat = ResponseFormat.Json)] 
    public void GetModels() 
    { 
     var models = Com.somedll.GetModels(); 
     var serializer = new JavaScriptSerializer(); 
     var response = models.Count != 0 
       ? serializer.Serialize(models) 
       : serializer.Serialize(new Error { Code = "500", Message = "Model Retrieval Failed" }); 
     this.Context.Response.Clear(); 
     this.Context.Response.ContentType = "application/json"; 
     this.Context.Response.Flush(); 
     this.Context.Response.Write(response); 
    } 

    #endregion 
    } 
} 

のように見えます。 ファイヤーバグを見ると、リクエストは少なくとも1回はに複数回送信されているようですが、誰でも助けてくれます。詳細情報が必要な場合はお知らせください

+2

フラッシュは最後にする必要がありますか?次の順序を入れ替えてみてください:this.Context.Response.Flush(); this.Context.Response.Write(response); –

+0

@BobToddはまだ同じエラーが発生しています** HTTPヘッダーが送信された後、サーバーはヘッダーを追加できません**修正仲間のために本当に奇妙な感謝 – Deviland

答えて

2

Flushに電話する前にResponse.Writeコールを移動してください。

this.Context.Response.Write(response); 
    this.Context.Response.Flush(); 

UPDATE:あなたはすでにあなたの応答タイプがJSONであることを示すしているので、あなたはまた、ContentTypeセッターを削除してくださいすることができます。

+0

これは効果がなかったコンテンツタイプステートメントを削除しました。間違っていると、ページはうまく見えます(あなたの助けを借りて)今は正常に見えます。しかし、私はまだエラーが発生しますか? – Deviland

1

あなたが戻ってからそれを除去しようとすることはできます:

this.Context.Response.Clear(); 
     this.Context.Response.ContentType = "application/json"; 
     this.Context.Response.Flush(); 
     this.Context.Response.Write(response); 

だけに:

this.Context.Response.Write(response); 

あるいは

this.Context.Response.BufferOutput = true; 
this.Context.Response.Write(response); 
this.Context.Response.End(); 

編集

あなたは、この動作を経験することができように聞こえる:

  1. あなたは
  2. をrepsonseために何かを書き、あなたのコードがエラーをトリガしますフラッシュ
  3. 、asp.netはコールので、許可されていないヘッダを書き換えるしようFlush()はすでにヘッダを書いています

そこにキャッチして何かがスローされているかどうか確認してください。

+0

これを試してみましたが、これは私のWebサービス内に1つのチェックマークが入っていることを確認しています:)。これは私がjavascriptをもう一度調べるように導いています。これからcontentTypeを取り除くと、JSONとして認識されたデータが取得されますが、FireBugに表示されている再帰をまだ取得していますが、なぜレスポンスが** 401 6回の通話すべてに対して無許可**ちょうど**私はサービスを一度呼び出すことを繰り返し** – Deviland

関連する問題