ASP.NET JQuery AJAX POST возвращает данные, но в ответе 401 - PullRequest
2 голосов
/ 28 марта 2012

У меня есть веб-страница в моем приложении, которая должна вызывать веб-службу, которую я настроил для возврата списка объектов.Этот вызов настроен так:

$(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, кажется, что запрос отправляется несколько раз, по крайней мере, 4 для каждого запроса, может кто-нибудь помочь.Пожалуйста, дайте мне знать, если вам нужна дополнительная информация

Ответы [ 2 ]

2 голосов
/ 28 марта 2012

Переместите Response.Write вызов до вызова на Flush.

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

ОБНОВЛЕНИЕ : Вы также можете попробовать удалить установщик ContentType, так как вы ужеуказав, что тип вашего ответа - JSON.

1 голос
/ 28 марта 2012

Можете ли вы попробовать снять его с:

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

вставьте пробную ловушку туда и посмотрите, если что-нибудь сработает.

...