2009-03-11 12 views
0

Guys, Nesnenin seri hale getirilmesini, istemciler için doğru şekilde çalışan istemiyorum gibi görünüyor mu? JQuery içinde getJSON() yöntemini bir mime türü metin/json (JSON.Net kitaplığı kullanılarak serileştirilmiş) ile birlikte kullandığımda, gayet iyi çalışıyordu, ancak bunu bir ajax() isteğine iletdikten hemen sonra kodumu web sayfamda sayfamda yayınlayabilir). Herhangi bir fikir çok takdir edilecektir.JS. Yanıtları (jQuery için) ASP.NET AJAX'tan nasıl doğru şekilde biçimlendirilir?

Düzenleme: (. Nb onun bir sayfa değil, bir webcoder)

function companySearch(txt) 
    { 
     $("#<%= divCompanyResult.ClientID %>").hide(); 
     $("#<%= divCompanyResult.ClientID %>").html(""); 

     var strCompanySearch = $("#<%= tbCompanySearch.ClientID %>").val(); 

     $.ajax 
     ({ 
      type: "POST", 
      url: "Home.aspx/GetCompanies", 
      contentType: "application/json; charset=utf-8", 
      datatype: "json", 
      data: "{name: '" + strCompanySearch + "'} ", 
      success: companySearchSuccess, 
      error: onError 
     }); 

     return (true); 
    } 

    function companySearchSuccess(response) 
    { 
     $.each(response, 
      function(i, company) 
      { 
       $("#<%= divCompanyResult.ClientID %>").prepend(company.Name + "<br />"); 
      }); 

     $("#<%= divCompanyResult.ClientID %>").slideDown(1000); 
    } 

Ve .aspx sayfası, görünüşü: Ben çerçeveyi 2.0 değil, 3.5

Benim javascript şöyle kullanıyorum böyle:

[WebMethod] 
    public static Company[] GetCompanies(string name) 
    { 
     Company[] companies = Company.FindCompanies(name); 

     return companies; 
    } 

Ve nesne onun dönen:

[ActiveRecord] 
public class Company : ActiveRecordBase<Company> 
{ 
    private int iD; 
    private string name; 
    private string accountNo; 
    private string streetAddr1; 
    private string streetAddr2; 
    private string streetSuburb; 
    private string streetCity; 
    private string postAddr1; 
    private string postAddr2; 
    private string postSuburb; 
    private string postState; 
    private string postPC; 
    private string accountType; 
    private string accountSubType; 
    private string areaRep; 
    private string status; 
    private string overview; 
    private string bpcsId; 
    private string modifiedBy; 
    private DateTime modifiedDate; 
    private IList<Contact> contacts; 

    [PrimaryKey] 
    public int ID { get { return this.iD; } set { this.iD = value; } } 
    [Property] 
    public string Name { get { return this.name; } set { this.name = value; } } 
    [Property] 
    public string AccountNo { get { return this.accountNo; } set { this.accountNo = value; } } 
    [Property] 
    public string StreetAddr1 { get { return this.streetAddr1; } set { this.streetAddr1 = value; } } 
    [Property] 
    public string StreetAddr2 { get { return this.streetAddr2; } set { this.streetAddr2 = value; } } 
    [Property] 
    public string StreetSuburb { get { return this.streetSuburb; } set { this.streetSuburb = value; } } 
    [Property] 
    public string StreetState { get { return this.streetCity; } set { this.streetCity = value; } } 
    [Property] 
    public string StreetPC { get { return this.streetCity; } set { this.streetCity = value; } } 
    [Property] 
    public string PostAddr1 { get { return this.postAddr1; } set { this.postAddr1 = value; } } 
    [Property] 
    public string PostAddr2 { get { return this.postAddr2; } set { this.postAddr2 = value; } } 
    [Property] 
    public string PostSuburb { get { return this.postSuburb; } set { this.postSuburb = value; } } 
    [Property] 
    public string PostState { get { return this.postState; } set { this.postState = value; } } 
    [Property] 
    public string PostPC { get { return this.postPC; } set { this.postPC = value; } } 
    [Property] 
    public string AccountType { get { return this.accountType; } set { this.accountType = value; } } 
    [Property] 
    public string AccountSubType { get { return this.accountSubType; } set { this.accountSubType = value; } } 
    [Property] 
    public string AreaRep { get { return this.areaRep; } set { this.areaRep = value; } } 
    [Property] 
    public string Status { get { return this.status; } set { this.status = value; } } 
    [Property] 
    public string Overview { get { return this.overview; } set { this.overview = value; } } 
    [Property] 
    public string BPCSId { get { return this.bpcsId; } set { this.bpcsId = value; } } 
    [Property] 
    public string ModifiedBy { get { return this.modifiedBy; } set { this.modifiedBy = value; } } 
    [Property] 
    public DateTime ModifiedDate { get { return this.modifiedDate; } set { this.modifiedDate = value; } } 

    // Inverse ensures is read-only ie. Contact controls the relationship 
    // Castle will usually infer relationship, but we explicitly set just to be on the safe side 
    [HasMany(Inverse=true, Table="Contact", ColumnKey="CompanyId")] 
    [ScriptIgnore] 
    public IList<Contact> Contacts { get { return this.contacts; } set { this.contacts = value; } } 

    protected Company() { } 

    public Company(string Name, string StreetAddr1) 
    { 
     this.Name = Name; 
     this.StreetAddr1 = StreetAddr1; 

     ModifiedBy = "Test"; 
     ModifiedDate = DateTime.Now; 
    } 

    public static Company[] FindCompanies(string name) 
    { 
     return FindAll(Expression.InsensitiveLike("Name", "%" + name + "%")); 
    } 
} 

cevap

3

Ben

Eski benim ajax istek üzerine dataType özelliği için deve kılıfı gözden vardı çıkıyor google, uğraştığım dersler ve bloglar ... Doh!

+0

Heh, Ben sadece benim komutumu benim nesne okuyamazdı neden çalışmaya çalışıyorum dışarı saçımı yırtarak 30 dakika geçirdim ..... ve tam olarak bu hata oldu! :(Büyük/küçük harf duyarlı diller. – Nick

1

Microsoft'un WebMethods, 'd' adlı bir nesnenin içindeki dönüş verilerini kodlar. Yani, bu gibi görünmek için kodunuzu değiştirmeniz gerekir: Bu kullanım, javascript özel bir tür önlemek için yapılır

function companySearchSuccess(response) 
{ 
    // Get encoded data 
    response = response.d; // you could rename this, or just change the variable reference 

} 

. Daha fazla ayrıntıyı here ve here görebilirsiniz. Başkaları arama saatleri önlemek

$.ajax 
    ({ 
     type: "POST", 
     url: "Home.aspx/GetCompanies", 
     contentType: "application/json; charset=utf-8", 
     datatype: "json", 
     data: "{name: '" + strCompanySearch + "'} ", 
     success: companySearchSuccess, 
     error: onError 
    }); 

Çözüm bu yardımcı olur

$.ajax 
    ({ 
     type: "POST", 
     url: "Home.aspx/GetCompanies", 
     contentType: "application/json; charset=utf-8", 
     dataType: "json", 
     data: "{name: '" + strCompanySearch + "'} ", 
     success: companySearchSuccess, 
     error: onError 
    }); 

Umut:

+0

Ah, korkunç "d". Bana sorarsanız çok şüpheli güvenlik "özelliği" ... yine de "response = response.d || response;" ASP.NET'in önceki sürümlerinde "d" sarıcı kullanılmadığı için daha uygun olur. –

+0

Maalesef, framework 2.0 kullanıyorum, bu çözüm değil. Firebug ile yanıtı kontrol ettim ve dize bir "d" nesnesine sarılmamış ... – mwjackson

+0

@Tsvetomir: iyi bir ekleme. Ama evet, bu 'özellik', web ölçümlerini diğer çerçevelerle bağdaşmaz hale getiriyor ki bu da gerçek bir acı olabilir. – Travis

İlgili konular