2012-03-28 3 views
2

У меня есть веб-страница в моем приложении, которая должна вызвать веб-службу, которую я настроил для возврата списка объектов. Этот вызов устанавливается как так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'); 
    }); 

}); 

Моя служба выглядит так

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 
    } 
} 

Я получаю следующие ошибки Сервер не может добавить заголовок после того, как заголовки HTTP были отправлены. и глядя на Firebug, запрос, кажется, отправляется несколько раз не менее для каждого запроса, может ли кто-нибудь помочь. Пожалуйста, дайте мне знать, если вам нужна дополнительная информация.

+2

Флеш должен быть последним? попробуйте поменять порядок: this.Context.Response.Flush(); this.Context.Response.Write (response); –

+0

@BobTodd все еще получает те же ошибки ** Сервер не может добавить заголовок после того, как были отправлены заголовки HTTP. ** действительно странное спасибо за исправление ребята – Deviland

ответ

2

Переведите свой Response.Write звонок до вашего звонка до Flush.

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

UPDATE: Вы также можете попробовать удаления ContentType сеттер, так как вы уже о том, что ваш тип ответ JSON.

+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. вы пишете что-то repsonse
  2. вы вровень
  3. вашего код вызывает ошибку, asp.net пытаются переписать заголовки, которые недопустимые потому вызов для Flush() уже написаны заголовки

Вставьте попытку ухватиться там и посмотрите, не вызваны ли какие-либо броски.

+0

Я пробовал это, и это подтвердило, что в моей веб-службе нет ошибки в одном галочке :). это заставило меня снова изучить javascript, и когда я удаляю ContentType, я получаю данные обратно как JSON, но я все еще получаю рекурсию, показанную в FireBug. Я не уверен, почему, но теперь ответ изменился на ** 401 неавторизованный ** для всех 6 вызовов. Просто, чтобы ** повторить, я только позвоню в службу ** – Deviland

Смежные вопросы