2009-02-24 17 views
32

jQuery 1.3.2, ASP.NET 2.0. PageMethod'a (WebMethod) bir AJAX çağrısı yapmak, yalnızca yanıt yerine tam/bütün sayfayı döndürür. Sayfa yöntemindeki bir kesme noktası, asla vurulmadığını gösterir. Yöntemimde [WebMethod] özniteliğim var ve genel statik, dize döndürüyor ve hiçbir param olmadığını kabul ediyor. Hatta yardımcı olup olmadığını görmek için sınıfımın en üstüne [ScriptService] eklemeyi denedim, ama yapmadı.jQuery ile ASP.NET PageMethod/WebMethod çağrısı - tüm sayfayı döndürür

Aynı belirtilerimi içeren bu yazıyı Jquery AJAX with ASP.NET WebMethod Returning Entire Page görmüştüm, ancak hala sorun yaşıyorum. http://encosia.com/2008/05/29/using-jquery-to-directly-call-aspnet-ajax-page-methods/'u okudum ve bunu T'ye takip ettiğimi hissediyorum, ama yine de şans yok.

ben yapıyorum jQuery çağrıdır: Ben bir ScriptManager ekledik

Response Headers 
Server ASP.NET Development Server/8.0.0.0 
Date Tue, 24 Feb 2009 18:58:27 GMT 
X-AspNet-Version 2.0.50727 
Cache-Control private 
Content-Type text/html; charset=utf-8 
Content-Length 108558 
Connection Close 

Request Headers 
Host localhost:2624 
User-Agent Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.9.0.6) Gecko/2009011913 Firefox/3.0.6 
Accept application/json, text/javascript, */* 
Accept-Language en-us,en;q=0.5 
Accept-Encoding gzip,deflate 
Accept-Charset ISO-8859-1,utf-8;q=0.7,*;q=0.7 
Keep-Alive 300 
Connection keep-alive 
Content-Type application/json; charset=utf-8 
X-Requested-With XMLHttpRequest 
Referer http://localhost:2624/MyApp/MyPage.aspx 
Content-Length 2 
Cookie ASP.NET_SessionId=g1idhx55b5awyi55fvorj055; 

şöyle

jQuery.ajax({ 
    type: 'POST', 
    contentType: 'application/json; charset=utf-8', 
    data: '{}', 
    dataType: 'json', 
    url: 'MyPage.aspx/SomePageMethod', 
    success: function(result){ 
     alert(result); 
    } 
}); 

istek/yanıt başlıkları, FF3 Firebug göre, vardır benim sayfa sadece yardımcı olup olmadığını görmek için başladı, ama hayır şans var.

Herhangi bir öneriniz var mı?

cevap

27

Sayfa Yöntemlerinin düzgün çalıştığını biliyor musunuz? ScriptManager'ı kullanırsanız çalışır mı?

a web.config entry eksik olabilirsiniz gibi görünüyor. Özellikle HttpModules bölümü.

+0

Dangit! Kolay bir şey olacağını biliyordum. ScriptManager'a düştüğümde ihtiyaç duyulan tüm yapılandırmaların VS tarafından ele alınacağını tahmin ettim (bu yüzden onu ekledim, çünkü bunu yapmaman gerektiğini biliyordum * gerek * Teşekkürler! – Matt

+1

Bunu araştırdım Bir saat + ve web.config için sorun ve ScriptModule httpModule suçlu olmak kadar sona erdi.Teşekkür! –

+2

Merhaba Dave Per @Surya, artık bağlantı işe yaramıyor .. – Matt

0

Gördüğüm çoğu ajax senaryosu, bir sayfa değil, bir web hizmeti veya ayrı bir komut dosyası işleyicisi çağırmalıdır. Bu çok kolay değil. 3-5 3-5, çok kolay değil 2-0. Tüm sayfanın nasıl yüklenemediğini anladıktan sonra bile, bir sayfa yöntemini çağırmama nedenleri şunlardır:

1) Sayfa yöntemi, tam sayfa yükünden daha az şey yükleyebilir, ancak yine de Basit bir ajax çağrısı için ihtiyacın var. 2) Sorumlulukların berbat ayrılığı. Sayfa, ajax yönteminde kullandığınız mantıktan değil, güzel döşeme parçalarından sorumludur.
3) Belki de bazı oturum durumuna ihtiyacınız var, ancak bu hala mevcut olmalıdır.

Şu anda bu konudaki bilgim güncelleniyor ... Bu konuya bu konuya iyi bir cevap bulacağım veya bir sonraki hafta yayınlayacağım. Burada yönettiğim yön

1) Sunucudan istemciye JSON gönderin ve sayfanızı güncellemek için javascript kullanın. - çeşitli çerçeveler web sunucusundan JSON üretmeyi kolaylaştırır.
2) JQuery ağrılı yerine ajax çağrılarını, json işlemlerini ve istemci biçimlendirmeyi eğlenceli hale getirir.

benim web.config bir satır eksikti
+0

Bu bir "sayfa yöntemi" nedir. JSON döndüren bir web hizmeti yazmanın uygun bir yolu –

+0

1) Hala bir async javascript çağrısı. Geride kodunuzda bir WebMethod özniteliği ile süslenmiş bir genel statik yöntem olarak bilinen bir PageMethod, yalnızca ASP.NET'in bu adrese karşı POST isteklerine yanıt vermesi için sözdizimsel bir koddur. – Matt

+0

(devam) Yanıt hala sadece JSON ve çok küçük. Görüntülü gösterim bile yok. 2) Sayfa yönteminde hangi mantığı kullandığımı nerden biliyorsunuz? Benim durumumda, aslında bu sayfaya özgü olan ancak sayfa yüklendiğinde kullanılamayacak olan verileri ele alıyor. 3) Seansa ihtiyacım yoktu, ama – Matt

23

: Ben

contentType: 'application/json' 

yılında "Uygulamayı" kelimesini yanlış yazmıştı Ve başlamıştı: Ben başka bir nedenden dolayı bugün yine bu sorunla karşılaştı

<system.web> 
    <httpModules> 
    <add name="ScriptModule" type="System.Web.Handlers.ScriptModule, System.Web.Extensions, Version=1.0.61025.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"/> 
    </httpModules> 
</system.web> 
+9

Adam Seabridge, nerede olduğunuzu şimdiden, seni seviyorum. –

+0

Bu çözüm, yeni bir hatayı tanıtır: HTTP Hatası 500.22 - İç Sunucu Hatası –

13

WebMethod'a bir çağrı yerine tam sayfa yanıtı.

+0

Benim için de uygulama yazım hatası. Bahşiş için teşekkürler. –

1

Bunu bir yan not olarak atın.HTML dizimde dize değişkenlerimin uzunluğundan dolayı bu hatayı alıyorum ve ajax'ımı almak için kullandığım web sitesi böyle görünüyordu.

loc = (loc.substr(loc.length - 1, 1) == "/") ? loc + "Default.aspx" : loc; 
     $.ajax({ 
      type: "POST", 
      url: loc + "/" + methodName, 
      data: "{" + args + "}", 
      contentType: "application/json; charset=utf-8", 
      dataType: "json", 
      success: onSuccess, 
      error: onFail 
     }); 

Bu doğru .aspx bağlantısını çıkarma yeteneğine sahip değildi, bu yüzden sadece loc var kullanarak yerine Web sayfamı kodlanmış.

3

Tüm bunları denediyseniz ve yine de sayfalarınızı pagemethod sayfanızdan döndürdüyseniz, arkadaşça URL'leri kullanmadığınızdan emin olmak isteyebilirsiniz. Neredeyse iki saat sonra

PageMethods.set_path(PageMethods.get_path() + '.aspx'); 
0

ve sonra ben nihayet çözüldü şeyi denemişti: Bunları kullanıyorsanız , bu hüner aramayı yapmadan önce

sizin js senaryo üzerinde bu satırı ekleyin yardımcı olabilir. @Marvin Zumbado'nun yorumu bana yardımcı oldu. Urm'den .aspx'i kaçırdım. Bunun bir programcı olarak en iyi anı olmadığını biliyorum!

İlgili konular