(प्रोटोटाइप के साथ) इस ajax के साथ समस्या क्या है?

वोट
1

हैलो मैं अगले कोड है: php पक्ष:

<?php
print_r($_POST);
print_r($_GET);
die();
?>

जावास्क्रिप्ट में:

voteAjax = function(typez, actionz, idz){
    new Ajax.Request(
        'http://localhost/reporeade/Vote/Ajax/?rand='+Math.random()*500000, 
        {asynchronous:true, 
         evalScripts:true,
         method:'post',
         parameters:'contentType='+typez+'&action='+actionz+'&id='+idz 
        });
    return false; 
}

और मेरे एचटीएमएल के कुछ हिस्से में:

<a class=button onclick=voteAjax('content','up','89');>

आप देख सकते हैं im स्थानीय होस्ट पर चल रहा है ... समस्या मेरे पास है कि पोस्ट किसी भी तरह कभी कभी मिश्रित हो जाता है, मैं अगले जवाब समय के 90% मिलता है:

Array
(
    [contentType] => content
    [action] => up
    [id] => 89
)

Array
(
    [rand] => 449701.9597706424
)

और उस समय के अन्य 10% मैं मिलता है:

Array
(
)

Array
(
    [rand] => 468905.44804602925
)

अब, मैं कोशिश की है सब कुछ बदल गया कंप्यूटर, एक पूर्ण यूआरएल के साथ एक सर्वर पर की कोशिश की (शायद स्थानीय होस्ट मुसीबत में सोच रहा था), कहीं पढ़ा है कि का उपयोग कर http: // localhost / reporeade / मतदान / अजाक्स / रैंड = की instade http: // स्थानीय होस्ट / reporeade / मतदान / अजाक्स? रैंड = मुसीबत हल लेकिन दोनों की कोशिश की और वास्तव में नहीं कर सकते undertand क्या पोस्ट करने के लिए खो दिया .... किसी भी विचार होगा?

संपादित करें: अच्छी तरह से यह सब के साथ खेलने के बाद, मैं इसे (यह है) की तरह अपने उत्पादन सर्वर में काम कर रहा है, लेकिन हमारे WAMP के सभी में instalations यह काम नहीं करेगा (अच्छी तरह से समय की 50% की तरह असफल) मिला है। इसका वास्तव में मुझे हल करने के लिए के लिए यह तो हम उत्पाद के सभी ajax कार्यक्षमता को विकसित करने पर रखने के लिए, तो कर सकते हैं महत्वपूर्ण ...

  • मैं XAMPP लेकिन इसकी संगत नहीं की कोशिश की हमारे ढांचे के साथ
  • मैं WAMP में 2.0 के बजाय 2.2 एपाचे के लिए जा रहा कोशिश की
  • मैं httpd.conf के विभिन्न विन्यास और php.ini के साथ करने की कोशिश की

क्यों WAMP इस तरह विफल हो जाएगा का कोई भी विचार?

अपडेट करें: मुझे यकीन है कि समस्या WAMP instalation कि है पोस्ट सही ढंग से कुछ समय नहीं भेज रहा, किसी भी मदद कि इस सुलझाने सही जवाब और इनाम मिल जाएगा करने के लिए नेतृत्व करेंगे है हूँ!

05/02/2009 को 21:35
का स्रोत उपयोगकर्ता
अन्य भाषाओं में...                            


12 जवाब

वोट
2

मैं WireShark स्थापित करने और आप समस्या यह है कि जिस तरह से अलग कर सकते हैं, तो देखने के लिए अपने HTTP ट्रैफिक नज़र रखने का सुझाव चाहते हैं।

05/02/2009 को 21:42
का स्रोत उपयोगकर्ता

वोट
1

इसकी एक पोस्ट अनुरोध आप रैंड पैरामीटर निर्धारित करने की आवश्यकता नहीं है, तो पोस्ट कैश्ड नहीं होता, हो सकता है में मदद करता है।

संपादित वास्तव में क्या नहीं समझ सकता विस्तार से अधिक कोड देखे बिना इस के कारण है। मुझे क्या होता है:

1) को एक वस्तु गुजर प्रयास करें parametersइस तरह विशेषता:

parameters: {
    contentType, typez,
    action: actionz,
    id: idz
}

बजाय एक स्ट्रिंग की:

parameters:'contentType='+typez+'&action='+actionz+'&id='+idz 

2) यदि आप की आवश्यकता क्यों है evalScripts? परीक्षण के लिए उसे निकाल दें।

3) इस से बाहर नरक डीबग, लगता है कि समस्या मापदंडों जावास्क्रिप्ट के साथ भेजा जा रहा है के साथ है, इसलिए Firebug का उपयोग console.log()गहराई में इस अधिक डिबग करने के लिए।

05/02/2009 को 21:46
का स्रोत उपयोगकर्ता

वोट
1

यादृच्छिक के बजाय) नई तारीख (कोशिश करें,:

voteAjax = function(typez, actionz, idz){
    new Ajax.Request(
        'http://localhost/reporeade/Vote/Ajax/', 
        {asynchronous:true, 
         evalScripts:true,
         method:'post',
         parameters:'contentType='+typez+'&action='+actionz+'&id='+idz+'&now='+new Date() 
        });

    //alert("params" + typez.toString() + actionz.toString() + idz.toString());
    return false; 
}
05/02/2009 को 21:46
का स्रोत उपयोगकर्ता

वोट
0

यदि आप एक प्राप्त बजाय का उपयोग क्या होता है। मेरा मतलब है, अगर आप भी URL में अन्य पैरामीटर जोड़? इस कदर

voteAjax = function(typez, actionz, idz){
    new Ajax.Request(
        'http://localhost/reporeade/Vote/Ajax?'+'contentType='+typez+'&action='+actionz+'&id='+idz+'&now='+new Date(), 
        {asynchronous:true, 
         evalScripts:true,
         method:'post',
         parameters:'' 
        });
    return false; 
}

मुझे लगता है कि आप प्राप्त कर सकते हैं।
उममीद है कि इससे मदद मिलेगी।

11/02/2009 को 15:00
का स्रोत उपयोगकर्ता

वोट
1

इसे इस्तेमाल करे:

voteAjax = function(typez, actionz, idz){
    new Ajax.Request(
        'http://localhost/reporeade/Vote/Ajax/', 
        {
           parameters: {
             contentType: typez,
             action: actionz,
             id: idz,
             rand: new Date()
           }
        });
    return false; 
}

ध्यान दें कि मेरे पास अन्य विकल्प को हटा दिया है, क्योंकि वे की वजह से वे इसे के मूलभूत मूल्यों पर हैं, आवश्यक नहीं कर रहे हैं :)

asynchronous:true, 
evalScripts:true,      -----> this one is "evalJS" not "evalScripts" :)
method:'post',

यो इसे यहाँ देख सकते हैं http://www.prototypejs.org/api/ajax/options

आशा है कि इसकी मदद करता है!

11/02/2009 को 15:15
का स्रोत उपयोगकर्ता

वोट
2

आप प्रोटोटाइप का एक और संस्करण की कोशिश की है? मुझे ऐसा लगता है, वहाँ पोस्ट अनुरोध शरीर को प्रभावी ढंग से निर्माण अमान्य (आंशिक रूप से) अनुरोध सर्वर ठीक से पार्स नहीं कर सकता बनाने में एक अजीब बग है। (Http समझ स्निफर करने के लिए आसान) और सटीकता से सर्वर के लिए भेजा जा रहा है क्या का प्रयोग करें फ़िडलर।

अगर ऐसा नहीं है (मैं स्वीकार करते हैं यह वास्तव में अजीब हो सकता है अगर प्रोटोटाइप टूट जाएगा), पीएचपी के माध्यम से कच्चे पद डेटा पढ़ने की कोशिश (php.ini में सक्षम होना चाहिए)। आप और वे में डाला जा नहीं कर रहे हैं कर सकते हैं $_POSTसंग्रह, कोशिश $_REQUESTके बजाय।

: इसके अलावा, निम्नलिखित धागा परामर्श करने के लिए प्रयास करते हैं, हो सकता है यह आपका मामला है http://bugs.php.net/bug.php?id=41349

11/02/2009 को 15:24
का स्रोत उपयोगकर्ता

वोट
1

मैं wampserver चल रहा हूँ, भी, तो मैं बस अपने कोड की कोशिश की, और मैं समस्या को पुन: नहीं कर सकता है - मैं हमेशा पोस्ट मूल्यों को प्राप्त। मेरी स्थापित अपाचे 2.2.8 और PHP 5.2.6 है, और मैं सिर्फ नवीनतम prototype.js पकड़ा। मेरे wampserver विन्यास काफी डिफ़ॉल्ट है।

Fiddler और / या Firebug के लिए +1। कच्चे हेडर कि शायद शिक्षाप्रद होगा भेजे जा रहे हैं को देखते हुए!

11/02/2009 को 16:12
का स्रोत उपयोगकर्ता

वोट
1

आप कौन सा ब्राउज़र उपयोग कर रहे हैं? यह विफल रहता है जब एफएफ और IE का उपयोग कर? या फिर सिर्फ एक ही ब्राउज़र।

कुछ समय पहले मैं IE और अपाचे gzip मॉड्यूल समस्याओं के बारे में पढ़ा। यह केवल स्थानीय प्रतिष्ठानों जहां एक सर्वर प्रतिक्रिया बहुत तेजी से था पर होने वाली किया गया था। हालांकि अपने मामले में अलग है।

यह निश्चित रूप से के रूप में दूसरों को पहले से ही सुझाव दिया WireShark कोशिश कर रहा लायक है। ऐसा नहीं है कि मुश्किल नहीं है। कम से कम आप पर कौन सा पक्ष वहाँ एक बग है जाना जाता हूँ।

11/02/2009 को 16:55
का स्रोत उपयोगकर्ता

वोट
1

हो सकता है कि कुछ घटक जहां अनुरोध (PHP, वेब सर्वर, फ़ायरवॉल, ...) से होकर गुजरता है भ्रमित हो जाता है कि आप GET पैरामीटर के साथ एक पोस्ट अनुरोध का उपयोग करें। यह कुछ भी बदलने करता है अगर तुम बाहर छोड़ ?rand=...हिस्सा है?

13/02/2009 को 07:29
का स्रोत उपयोगकर्ता

वोट
2

यह एक लंबा शॉट है, लेकिन अधिक जानकारी और अपनी कोड के अधिक देखे बिना मैं इस पूछने के लिए ताकि आप इसे से इनकार कर सकता है: यह लिंक और दो तेजी से अनुरोध बनाने पर उपयोगकर्ता डबल क्लिक के साथ कुछ मिल सकता है? (एक बार की बात मैं ने काट लिया गया <input type = "छवि" onclick = "प्रस्तुत ();"> दोनों onclick चलाने के लिए और प्रपत्र प्रस्तुत)

function test() {
    voteAjax('content','up','89');
    voteAjax('content','up','89');
}

(ऊपर अपने लिंक कॉल परीक्षण समारोह है)

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

Btw, मैं भी सुझाव है कि आप पैरामीटर के रूप में एक स्ट्रिंग के बजाय एक वस्तु भेजने के लिए, के बाद से प्रोटोटाइप यह URIEncode और सही स्थानों पर सभी और डाल देंगे।

15/02/2009 को 19:51
का स्रोत उपयोगकर्ता

वोट
1

मैं यह भी सुझाव है आप Wireshark के माध्यम से अपने नेटवर्क यातायात की निगरानी करनी चाहिए:

  1. या तो सर्वर या क्लाइंट पर यह शुरू करो।
  2. अपने नेटवर्क इंटरफेस कैप्चर करने के लिए।
  3. AJAX का प्रयोग करें और
  4. यह कब्जा रोक विफल रहता है कि कब और
  5. Wireshark में http टाइप आप अनुरोध को खोजने में मदद करने के लिए।
  6. राइट-क्लिक करें और "का पालन टीसीपी स्ट्रीम"।

अनुरोध में पोस्ट डेटा दिखाई नहीं देता है, तो यह ब्राउज़र के साथ कुछ। आप (संयोजन के रूप में GZip तरह IE के साथ पहले उल्लेख किया गया है) संभव त्रुटियों के लिए HTTP हेडर की जांच कर सकता।

हो सकता है कि आपके WAMP सेटअप पीएचपी कॉल करने के लिए फास्ट सीजीआई या इसी तरह का उपयोग करता है, तो यह अपाचे के लिए वास्तविक पीएचपी मॉड्यूल का उपयोग नहीं कर रहा है? कभी-कभी यह अगर सही ढंग से सेट नहीं कर सकते ऐसी त्रुटियों का कारण है। आप जरूरी यह की जरूरत नहीं है मैं PHP मॉड्यूल के लिए स्विच करने की अनुशंसा या संभव विन्यास गलतियों के लिए लग रही है।

क्या WAMP यह, वैसे भी है? पहले से कॉन्फ़िगर या कस्टम?

15/02/2009 को 20:47
का स्रोत उपयोगकर्ता

वोट
0

मैं इस तरह अजाक्स कॉल करना चाहते हैं:

voteAjax = function(typez, actionz, idz){
    var rndVal = Math.random()*500000;

    new Ajax.Request( 'http://localhost/reporeade/Vote/Ajax/', {
         method:  'post',
         parameters: {contentType: typez, action: actionz, id: idz, rand: rndVal}, 
         onSuccess:  function(response) {
               //do stuff
         },
         onFailure:  function() {
               alert('Something went wrong.');
         }
        });
     return false;
  }
15/02/2009 को 22:29
का स्रोत उपयोगकर्ता

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more