2010-02-12 20 views
6

में विफल रहता है मुझे एक क्लिक ट्रैकिंग AJAX फ़ंक्शन (WebMethod पर .aspx पृष्ठ पर कॉल करता है), और जब उपयोगकर्ता किसी लिंक पर क्लिक करता है तो मुझे इसे कॉल करने की आवश्यकता होती है।विंडो। स्थान परिवर्तन AJAX कॉल

दुर्भाग्य से, मैं पेज बदलने के लिए window.location = "newUrl" का उपयोग कर रहा हूं, जो कि AJAX कॉल विफल होने लगता है। क्या इसके चारों ओर एक रास्ता है?

मुझे AJAX कॉल से कोई जानकारी वापस लेने की आवश्यकता नहीं है, मुझे बस यह सुनिश्चित करने की आवश्यकता है कि WebMethod कहा जाता है।

मुझे पता है कि मैं सिर्फ success() या failure() कॉल पर अनुप्रेषित सकता हूँ, लेकिन फिर मैं जो ~ 1s लेता है चलाने के लिए clickTracking() विधि, के लिए इंतजार करना होगा। यह प्रोजेक्ट स्पेक में समझौते से स्वीकार्य नहीं है, और इसलिए एक व्यवहार्य समाधान नहीं है।

+0

@Ed: क्या आपके उपयोगकर्ताओं के पास वास्तव में आपके मेजबान के लिए ~ 1 विलंबता होगी। यह एक बहुत रूढ़िवादी अनुमान हो सकता है। मैं 100 एमएमएस का लक्ष्य रखूंगा। –

+0

@Daniel हमारे पास अधिकांश पृष्ठों पर पूर्ण 1 टर्नअराउंड पर लगभग 1 एस के लिए एक समझौता है, व्यावहारिक रूप से वे बहुत कम उम्मीद करते हैं, और ट्रैकक्लिक विधि कुछ आश्चर्यजनक समय-महंगी चीजें करता है (इसे बाद की तारीख में सुव्यवस्थित किया जा सकता है)। कहने का पर्याप्त कारण, पूरा करने की विधि का इंतजार करना एक व्यवहार्य विकल्प नहीं है, इसलिए पहले स्थान पर AJAX का उपयोग करना। –

उत्तर

3

AJAX का उपयोग करने के बजाय, आप उपयोगकर्ता को केवल एएसपीएक्स पेज पर क्यों नहीं भेजते हैं जो क्लिक रिकॉर्ड करता है और फिर location शीर्षलेख को नए यूआरएल पर रीडायरेक्ट करने के लिए भेजता है? उदाहरण के लिए, लिंक क्लिक पर, निम्न स्थिति होगी:

window.location = "/redirect.aspx?track=true&url=" + encodeURIComponent(newUrl); 

redirect.aspx तो दोनों पर नज़र रखने और नए URL पुन: निर्देशित संभाल होगा। उपयोगकर्ता को अपने रास्ते पर भेजने से पहले AJAX अनुरोध को पूरा करने के इंतजार किए बिना आप ऐसा कर सकते हैं।

यह भी देखें: Redirecting Users to Another Page (MSDN)

यह शायद यह देखते हुए कि आप इस विधि कई साइटों पर हर दिन देखने लायक है। आमतौर पर, वे विज्ञापनों में पाए जाते हैं। एक ऐडसेंस विज्ञापन लिंक इस तरह दिखता है:

http://www.google.com/aclk 
    ?sa=L&ai=C6DnFKnl1S5zhKoSBjAeqyKzKBPOD_2ehlIXfD9WsvQsQAVDQzK______ 
    8BYLvOuYPQCsgBAaoEGU_Q8k4OJin9jMDXAD6KQ_2Dsv7xyokLxRY 
    &num=1&ggladgrp=13269254452699041863&gglcreat=8511532373602616220 
    &sig=AGiWqtwzFm2sTimBuQpkD5kazyRNkkqH3w 
    &q=http://www.amazon.co.uk/s/%3Fie%3DUTF8%26keywords%3Dhello%2Bworld 

आईएसएच, वैसे भी (मैंने इसे थोड़ा सा खटखटाया)। जब आप इसे क्लिक करते हैं, तो आप http://www.google.com/aclk पर उतरते हैं, जो क्लिक को ट्रैक करने के बाद आपको अंतिम साइट पर रीडायरेक्ट करता है।

+0

अभी भी पूरी तरह से async नहीं है, इसलिए मुझे क्लिक विधि को पूरा करने के लिए इंतजार करना होगा, जो लोड समय को गड़बड़ कर देगा। –

+2

@ एडी वुडकॉक: मुझे नहीं लगता कि यह एक नई विंडो खोलने के बिना इस async करना संभव है। जैसे ही आप पृष्ठ से दूर नेविगेट करते हैं, कोई भी मौजूदा अनुरोध रद्द कर दिया जाएगा। सबसे अच्छा समाधान आईएमओ वह है जो अधिकांश साइटें 'yourpage.aspx -> redirect.aspx -> परिणाम url' का उपयोग करती हैं। –

+0

हां, मैंने इसे पहले इस्तेमाल किया है, और यह एक बुरा समाधान नहीं है, हालांकि मैं उम्मीद कर रहा था कि कुछ प्रकार के जादुई एक-शॉट समाधान थे। आपको लगता है कि अब तक होगा, यह देखते हुए कि प्रमुख डेटा खनन व्यवसाय विपणन विकल्प के रूप में कैसे है। –

2

मुझे बस यह सुनिश्चित करने की आवश्यकता है कि WebMethod कहा जाता है।

यदि उपरोक्त वास्तव में महत्वपूर्ण है, तो आप निम्न कर सकते हैं:

function onLinkClicked() { 
    $.ajax({ 
     url: 'WebMethod.aspx', 
     success: function(data) { 
      window.location = "newUrl"; 
     } 
    }); 
} 

से जब पेज पर रीडायरेक्ट करेगा कुछ विलंबता होगा। यह आपके आवेदन के आधार पर और आपके उपयोगकर्ताओं से आपके मेजबान की औसत विलंबता के आधार पर स्वीकार्य हो सकता है या नहीं भी हो सकता है।


संपादित करें:

इसके अलावा करने के लिए नई टिप्पणी नीचे, दुर्भाग्य से window.location परिवर्तन आपके AJAX अनुरोध बाधित करता है।

आंतरिक लिंक के लिए: जब आप हाइपरलिंक पर क्लिक करते हैं तो आप नए लिंक पर जैसे ही उपयोगकर्ता अपने लिंक ट्रैक करना चाहते हैं।

बाहरी लिंक के लिए: मैं Andy E suggested in another answer के रूप में एक सर्वर साइड रीडायरेक्ट विधि का उपयोग करूंगा।

+0

अहम। मैं सिर्फ इस सवाल को संपादित कर दूंगा: 1sec + पेज रीडायरेक्ट समय स्वीकार्य नहीं हैं! –

+0

और 'सुनिश्चित करें कि इसे' कहा जाता है, मेरा मतलब है कि कॉल वेब विधि से हो जाता है, इसे वापस आने की प्रतीक्षा न करें। –

+0

@Ed: दुर्भाग्य से यह बात यह है कि आप कभी भी यह सुनिश्चित नहीं कर सकते कि जब तक आप इसकी वापसी की प्रतीक्षा नहीं करते हैं :) –

0

अपने पृष्ठों को लपेटने के लिए रैपर का उपयोग करें। फिर, जब आपके पास AJAX अनुरोध है, तो अनुरोध को रैपर तक पास करें और पर नेविगेट करें। ऐसा करने से आपको ऐप प्रतिक्रिया को बनाए रखने के दौरान पूरी तरह से असीमित अनुरोध करने की क्षमता मिल जाएगी।

अनुमोदित, आप एड्रेस बार को भी बदल नहीं रहे हैं और प्रभावी रूप से अपने एसईओ को मार रहे हैं, लेकिन यह खराब वास्तुकला रखने का व्यापार है। तथ्य यह है कि आपका क्लिक ट्रैकिंग फ़ंक्शन लगभग एक सेकंड लेता है बस आश्चर्यजनक है। शायद आपको इसे सर्वर पर एक एसिंक्रोनस थ्रेड पर शुरू करना चाहिए और क्लाइंट को डेटा को अलग थ्रेड (System.Threading) के साथ डेटा देना चाहिए। इससे आप जिन समस्याओं का सामना कर रहे हैं उन्हें कम कर देंगे।

अन्यथा, आप अतुल्यकालिक, विश्वसनीय, या हो सकता है "एक साथ काट दिया नहीं"। किसी भी दो उठाओ।

संपादित

मेरे बुरा, आप भी अपने AJAX अनुरोध एक पॉपअप के रूप में चला सकते हैं:

window.open(url,'ajax','height=0,width=0'); 

यह अभी भी एक अच्छा विचार नहीं है, लेकिन यह काम करेंगे।

+0

मुझे यकीन नहीं है कि मैं एक आईफ्रेम में लिपटे एक पूरी वेबसाइट को पेट कर सकता हूं, ये चीजें बुरी हैं। इसके अलावा, Google * उन्हें एसईओ उद्देश्यों के लिए नफरत करता है। –

+0

@ एडी वेल, आप वास्तव में ज्यादा पसंद नहीं है। जैसे मैंने कहा, आप तीन में से दो विकल्पों में से एक हो सकते हैं।मुझे लगता है कि यह फ्रंट-एंड कोड पर एक साथ हैक करने का अवसर है, इससे बैक-एंड कोड पर काम करने का अवसर है। – mattbasta

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