2008-08-26 21 views
5

मैं अपनी कंपनी के आवेदन में काफी अजाक्स भारी सुविधा शुरू करने जा रहा हूं। मुझे जो करना है वह पेज पर उपयोगकर्ता द्वारा हर कुछ मिनटों में अजाक्स कॉलबैक कर रहा है।पूर्ण पोस्टबैक के बिना एएसपी.नेट जावास्क्रिप्ट कॉलबैक?

  • मुझे कॉलबैक से पहले, उसके बाद या उसके दौरान कोई भी डोम अपडेट करने की आवश्यकता नहीं है।
  • मुझे पृष्ठ से किसी भी जानकारी की आवश्यकता नहीं है, बस एक साइट कुकी से जिसे हमेशा अनुरोधों के साथ भेजा जाना चाहिए, और एक आईडी मान।

मुझे यह जानने के लिए उत्सुकता है कि क्या पृष्ठ पर शेष जानकारी पोस्ट किए बिना एक एएसपी.NET पृष्ठ पर जावास्क्रिप्ट अजाक्स कॉलबैक बनाने का कोई साफ और आसान तरीका है। यदि यह संभव हो तो मैं ऐसा नहीं करना चाहता हूं।

मैं वास्तव में बस पृष्ठ पर एक ही विधि को कॉल करने में सक्षम होना चाहता हूं, और कुछ नहीं।

इसके अलावा, मैं एएसपी.नेट 2.0 तक ही सीमित हूं, इसलिए मैं किसी भी 3.5 फ्रेमवर्क एएसपी AJAX सुविधाओं का उपयोग नहीं कर सकता, हालांकि मैं 2.0 ढांचे के लिए एएसपी AJAX एक्सटेंशन का उपयोग कर सकता हूं।

अद्यतन
मैं के रूप में यह मैं वास्तव में क्या देख रहा हूँ हो रहा है DanP के जवाब को स्वीकार करने का निर्णय लिया है। हमारी साइट पहले से ही कुछ चीजों के लिए jQuery का उपयोग करती है, इसलिए मैं संभवतः अनुरोध करने के लिए jQuery का उपयोग करूंगा क्योंकि मेरे अनुभव में यह एएसपी के AJAX ढांचे की तुलना में काफी बेहतर प्रदर्शन करता है।

आपको लगता है कि IHttpHandler को डेटा स्थानांतरित करने का सबसे अच्छा तरीका क्या होगा? क्या मुझे क्वेरी स्ट्रिंग में चर जोड़ना चाहिए या मुझे डेटा भेजने के लिए पोस्ट करना चाहिए?

केवल एक चीज मुझे लगता है कि मैं भेजने के लिए एक भी आईडी है, लेकिन मैं तय नहीं कर सकता क्या सबसे अच्छा तरीका आईडी भेजने के लिए है और IHttpHandler इसे संभाल कर सकते है। मैं ऐसे समाधान के साथ आना चाहता हूं जो मूल कंप्यूटर कौशल वाले व्यक्ति को गलती से या जानबूझकर पृष्ठ तक पहुंचने या अनुरोध दोहराने से रोक देगा। क्या यह संभव है?

उत्तर

6

आप एक रिक्त पृष्ठ बनाने के लिए नहीं करना चाहते हैं, तो आप एक IHttpHandler (ashx) फ़ाइल कह सकते हैं:

public class RSSHandler : IHttpHandler 
    { 
     public void ProcessRequest (HttpContext context) 
     { 
      context.Response.ContentType = "text/xml"; 

      string sXml = BuildXMLString(); //not showing this function, 
      //but it creates the XML string 
      context.Response.Write(sXml); 
     } 

     public bool IsReusable 
     { 
      get { return true; } 
     } 

    } 
2

तुम बस ASP.NET AJAX तक ही सीमित नहीं रहे हैं लेकिन, YUI आदि jQuery की तरह किसी भी 3 पार्टी पुस्तकालय का उपयोग कर सकते एक ही बात करते हैं। फिर आप अपनी साइट पर एक खाली पृष्ठ पर अनुरोध कर सकते हैं, जिसमें कुकीज़ वाले हेडर को वापस करना चाहिए।

-1

तुम भी webMethods जो asp.net ajax पुस्तकालय में निर्माण कर रहे हैं का उपयोग कर सकते हैं। आप बस पेज के कोड पर एक स्थिर विधि बनाते हैं और इसे अपने अजाक्स से कॉल करते हैं।

कैसे करना है यह here

-1

आप एक वेब (.asmx) सेवा का उपयोग करना चाहिए की एक बहुत बुनियादी उदाहरण नहीं है। माइक्रोसॉफ्ट के ASP.NET AJAX के साथ आप भी स्टब्स को स्वत: जनरेट कर सकते हैं।

3

आप ASP.Net कॉलबैक जो Asp.Net 2.0 में पेश किए गए प्रयोग करना चाहिए।

Implementing Client Callbacks Programmatically Without Postbacks in ASP.NET Web Pages

संपादित करें:: यहाँ एक लेख है कि आप जाने के लिए तैयार किया जाना चाहिए है इसके अलावा इस पर नज़र डालें: ICallback & JSON Based JavaScript Serialization

2

मेरा वोट के रूप में अच्छी तरह से HttpHandler सुझाव के साथ है। मैं अक्सर इसका उपयोग करता हूं। क्योंकि यह पृष्ठ वर्ग के उदाहरण का आह्वान नहीं करता है, यह बहुत हल्का है।

सभी एएसपी.NET AJAX फ्रेमवर्क चाल वास्तव में तत्काल तत्काल हैं और पूरे पृष्ठ को बैकएंड प्रति कॉल पर फिर से बनाते हैं, इसलिए वे विशाल संसाधन हैंग हैं।

इसलिए, XmlHttpRequest की मेरी सामान्य शैली एक HttpHandler पर वापस आ गई।

3

आपको लगता है कि IHttpHandler को डेटा स्थानांतरित करने का सबसे अच्छा तरीका क्या होगा? क्या मुझे क्वेरी स्ट्रिंग में वेरिएबल्स जोड़ा जाना चाहिए या मुझे डेटा भेजने के लिए पोस्ट करना चाहिए? मुझे लगता है कि मुझे केवल एक ही आईडी भेजना है, लेकिन मैं यह तय नहीं कर सकता कि आईडी भेजने के लिए सबसे अच्छी विधि क्या है और IHttpHandler इसे संभाल लेता है। मैं एक समाधान है कि गलती से या जानबूझकर पेज सीधे

कॉलबैक को ध्यान में रखते ग्राहक कोड में दफनाया गया है तक पहुँचने से बुनियादी कम्प्यूटर कौशल के साथ एक व्यक्ति को रोका जा सकेगा साथ आने के लिए करना चाहते हैं, यह बराबर दृढ़ संकल्प के साथ किसी ले जाएगा क्वेरीस्ट्रिंग या POST अनुरोध प्राप्त करने के लिए। आईई, अगर उनके पास फायरबग है, तो आपका उतना ही खराब है।

तो, उस स्थिति में, जो भी आपके लिए सबसे आसान है (संकेत: मैं केवल क्वेरीस्ट्रिंग का उपयोग करता हूं)।

दोहराने के अनुरोध/प्रत्यक्ष पहुंच को संभालने के लिए, मैं प्रत्येक अनुरोध के साथ एक कुंजी उत्पन्न करता हूं। शायद वर्तमान समय का हैश (फ़ज़ी, मैं मिनटों तक नीचे जाऊंगा, लेकिन नेटवर्क विलंबता के कारण सेकंड नहीं) + क्लाइंट आईपी।

फिर HTTPHandler में, एक ही हैश करें, और केवल मिलान होने पर ही चलाएं।

1

चूंकि आप केवल एएसपी.NET 2.0 का उपयोग कर रहे हैं, तो मैं AjaxPro की सिफारिश करूंगा जो .ashx फ़ाइल बनायेगा। आपको बस अपनी वेबसाइट पर AjaxPro.dll खींचना है। मैंने AjaxPro के साथ एक संपूर्ण एप्लिकेशन विकसित किया और पाया कि यह बहुत अच्छा काम करता है। यह वस्तुओं को आगे और आगे पास करने के लिए क्रमबद्धता का उपयोग करता है।

यह केवल इसका उपयोग करने के तरीके पर एक नमूना है।

namespace MyDemo 
{ 
    public class Default 
    { 
    protected void Page_Load(object sender, EventArgs e) 
    { 
     AjaxPro.Utility.RegisterTypeForAjax(typeof(Default)); 
    } 

    [AjaxPro.AjaxMethod] 
    public DateTime GetServerTime() 
    { 
     return DateTime.Now; 
    } 
    } 
} 

जावास्क्रिप्ट के माध्यम से यह कॉल करने के लिए यह उतना ही आसान

रूप
function getServerTime() 
{ 
    MyDemo._Default.GetServerTime(getServerTime_callback); // asynchronous call 
} 

// This method will be called after the method has been executed 
// and the result has been sent to the client. 

function getServerTime_callback(res) 
{ 
    alert(res.value); 
} 

संपादित

तुम भी

करने के लिए

जोड़ने के लिए है config। AjaxPro भी APS.NET अजाक्स के साथ कंधे से अच्छी तरह से काम करता है और पक्ष आप तोड़ अगर वर्ग के रूप में चिह्नित किया गया है क्लाइंट से सी # वस्तुओं पारित कर सकते हैं [Serializable]

1

बस एक अलग दृष्टिकोण की पेशकश करने के लिए, आप भी एक PageMethod पर इस्तेमाल कर सकते हैं अपने मुख्य पृष्ठ। डेव वार्ड की एक अच्छी पोस्ट है कि illustrates यह है।बिल्कुल Asp.Net अजाक्स एक्सटेंशन के लिए

$.ajax({ 
    type: "POST", 
    url: "Default.aspx/GetFeedburnerItems", 
    // Pass the "Count" parameter, via JSON object. 
    data: "{'Count':'7'}", 
    contentType: "application/json; charset=utf-8", 
    dataType: "json", 
    success: function(msg) { 
     BuildTable(msg.d); 
    } 
    }); 

कोई ज़रूरत नहीं: मूलतः आप के रूप में डेव पोस्ट में दिखाया गया है, विधि कॉल करने के jQuery ajax पद का उपयोग करें।

संबंधित मुद्दे