2010-05-17 14 views
10

मुझे अपने नए प्रोजेक्ट पर एक छोटे से फ़ंक्शन को डिबग करने में एक दुखी समय हो रहा है।AJAX को PHP कॉल में डीबग करने का सबसे अच्छा तरीका क्या है?

अनिवार्य रूप से मेरे पास "userfFunctions.php" नामक मेरे सर्वर पर मेरी लॉग आउट स्क्रिप्ट के लिए एक AJAX कॉल के माध्यम से उपयोगकर्ता लॉग आउट हो रहा है, इसलिए मैं AJAX का उपयोग कर रहा हूं ताकि मुझे अधिक रेगेक्स लिखने का सिरदर्द न हो मेरे mod_rewrites से मेल खाते हैं। वैसे भी, हर बार ऐसा लगता है कि मेरा पोस्ट डेटा बस मर जाता है और चूंकि PHP दृश्यों के पीछे चल रहा है, मुझे लगता है कि मेरे पास डेटा प्रवाह को बाधित करने का कोई तरीका नहीं है। बीटीडब्ल्यू यह समारोह दिन के 1 9 घंटे काम करता है।

यहाँ जावास्क्रिप्ट समारोह है:

function logOut(){ 
    var data = new Object; 
    data.log_out = true; 
    $.ajax({ 
     type: 'POST', 
     url: 'http://www.mydomain.com/User_Validator', //<-- redirects to userFunctions.php 
     data: data, 
     success: function(data) { 
     alert(data); // <-- a response is triggered but with no response data! 
     } 
    }); 
} 

php पक्ष:

if(isset($_POST['log_out'])){ 
    echo 'alert this!'; 
} 

यहाँ मेरी भयानक प्रतिक्रिया है: alt text http://img517.imageshack.us/img517/6520/screenshot20100517at443.png

उत्तर

8

FirePHP:

FirePHP आप एक सरल पीएचपी विधि कॉल का उपयोग कर अपने Firebug कंसोल पर लॉग इन करने के लिए सक्षम बनाता है।

सभी डेटा प्रतिक्रिया शीर्षलेख के माध्यम से भेजा जाता है और आपके पृष्ठ पर सामग्री में हस्तक्षेप नहीं करेगा।

फ़ायरपीएचपी आदर्श रूप से AJAX विकास के लिए उपयुक्त है जहां स्वच्छ JSON और XML प्रतिक्रिया आवश्यक हैं।

function FirePHP($message, $label = null, $type = 'LOG') 
{ 
    static $i = 0; 

    if (headers_sent() === false) 
    { 
     $type = (in_array($type, array('LOG', 'INFO', 'WARN', 'ERROR')) === false) ? 'LOG' : $type; 

     if (($_SERVER['HTTP_HOST'] == 'localhost') && (strpos($_SERVER['HTTP_USER_AGENT'], 'FirePHP') !== false)) 
     { 
      $message = json_encode(array(array('Type' => $type, 'Label' => $label), $message)); 

      if ($i == 0) 
      { 
       header('X-Wf-Protocol-1: http://meta.wildfirehq.org/Protocol/JsonStream/0.2'); 
       header('X-Wf-1-Plugin-1: http://meta.firephp.org/Wildfire/Plugin/FirePHP/Library-FirePHPCore/0.3'); 
       header('X-Wf-1-Structure-1: http://meta.firephp.org/Wildfire/Structure/FirePHP/FirebugConsole/0.1'); 
      } 

      header('X-Wf-1-1-1-' . ++$i . ': ' . strlen($message) . '|' . $message . '|'); 
     } 
    } 
} 

मैं इसे लिखा था इतना है कि यह केवल स्थानीय होस्ट पर (सुरक्षा कारणों से) काम करता है, लेकिन आप आसानी से कि निम्न कोड की जगह को बदल सकते हैं:

यहाँ एक minimalistic कार्यान्वयन मैंने लिखा है

if (($_SERVER['HTTP_HOST'] == 'localhost') && (strpos($_SERVER['HTTP_USER_AGENT'], 'FirePHP') !== false)) 

के साथ:

if (strpos($_SERVER['HTTP_USER_AGENT'], 'FirePHP') !== false) 
+0

इसके लिए आपको बहुत बहुत धन्यवाद! महान दृष्टिकोण –

+0

@Jascha: कोई समस्या नहीं, मैंने प्रदान किए गए फ़ंक्शन में एक टाइपो था - यह अभी तय है। =) –

8

Firefox के लिए FireBug प्लगइन की तरह कुछ का उपयोग करके देखें, या अनुरोध किए जा रहे अनुरोध को देखने के लिए क्रोम में डेवलपर टूल्स।

+3

अलावा फायर पीएचपी के लिए ताकि आप उसी फायरबग विंडो में PHP कोड को डीबग कर सकें – Jacob

+2

फ़ायरबग + फ़ायरपीएचपी भयानक है http://firephp.org/ – Shiki

+0

मुझे बिल्कुल यकीन नहीं है कि हेडर अनुरोध में क्या देखना है ... विशेष रूप से कुछ भी? –

2

क्या आपने dataType को "text" पर सेट करने का प्रयास किया है?

function logOut(){ 
    var data = { 
     "log_out" : true 
    }; 
    $.ajax({ 
     type: 'POST', 
     url: 'http://www.mydomain.com/User_Validator', 
     data: data, 
     success: function(data) { 
      alert(data); 
     }, 
     dataType : 'text' 
    }); 
} 

इसके अलावा, मैं यह करने के लिए अपने PHP बदल जाएगा:

print_r($_POST); 
+0

मैंने कोशिश की है, सच्चाई यह है कि, मैं वास्तव में केवल एक टेक्स्ट प्रतिक्रिया की तलाश नहीं कर रहा हूं, मैं केवल डीबग करने के तरीके के रूप में प्रतिक्रिया का उपयोग कर रहा हूं, php फ़ंक्शन में मैं वास्तव में कुकीज़ और session_destroy को बाहर निकालता हूं और फिर सफलता पर जावास्क्रिप्ट के साथ पेज रीफ्रेश करें। –

0

मैंने देखा:

//<-- redirects to userFunctions.php 

जब आप ऐसा करेंगे एक अनुप्रेषित (हेडर ("स्थान:");) आप अपना $ _POST और $ _GET डेटा खो देंगे। (यदि आप एक यूआरएल की चर्चा करते हुए कर रहे हैं पुनर्लेखन (mod_rewrite के साथ) आप डेटा प्राप्त करना चाहिए।)

लेकिन इस 19hr लक्षण स्पष्ट नहीं होता।

+0

मैं आपकी प्रतिक्रिया के लिए धन्यवाद, यह वास्तव में एक पुनर्लेखन है और एक रीडायरेक्ट नहीं है। –

0

आप $ _POST सरणी ही जाँच, कुछ इस तरह के साथ की कोशिश कर सकते:

var_dump($_POST); 

देखने के लिए कि सरणी भी सब पर डाला जा रहा है और फिर वहाँ से काम करते हैं। फ़ायरबग का उपयोग करके, आप यह भी पुष्टि कर सकते हैं कि AJAX पोस्ट वास्तव में डेटा भेज रहा है (कंसोल या नेट टैब जांचें)।

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