2010-09-06 7 views
25

के बाद सत्र कार्ट में वर्गों और पैक जोड़ने के लिए एक AJAX कार्यक्षमता का एक हिस्सा है: -बूलियन चर AJAX के माध्यम से पोस्ट सर्वर साइड में तारों के रूप में इलाज किया जा रहा

jQuery हिस्सा

function addClassToCart(itemId) 
{ 
    addItemToCart(itemId,true); 
} 

function addPackToCart(itemId) 
{ 
    addItemToCart(itemId,false); 
} 

function addItemToCart(itemId,isClass) 
{ 
    $.post(url+"/ajax/add_cart", { operation: 'add_cart','isClass':isClass, 'itemId': itemId}, 
     function(data) 
     { 
       if(data.success) 
       { 
         alert("item added to cart"); 
       } 
     }, "json"); 

} 

AJAX अनुरोध प्रसंस्करण php हिस्सा -

//Checking operation and other posted parameters 
if($_POST['isClass']) 
{ 
    //Code to add class to session cart 

} 
else 
{ 
    //Code to add pack to session cart 
} 

अजीब बात

कोई फर्क नहीं पड़ता कि क्या मैं सही/गलत पारित (addClassToCart() और addPackToCart() कॉल करके), हमेशा कोड को सत्र गाड़ी कार्यान्वित वर्ग को जोड़ने के लिए।
अगर मैं इस तरह वहाँ गूंज बयान कर दिया: -

if($_POST['isClass']) 
    { 
     echo "see if condition ".$_POST['isClass']; 
    } 
    else 
    { 
     echo "see else condition ".$_POST['isClass']; 
    } 

यह आउटपुट है: -

addClassToCart() see if condition true
addPackToCart() see if condition false

jQuery में इस तरह की स्थिति लाना कोड हालांकि ठीक काम करता है: -

function addItemToCart(itemId,isClass) 
{ 
    if(isClass) 
     alert("is class"); 
    else 
     alert("is pack"); 
} 

अंत में, यदि मैं यह करने के लिए सर्वर साइड कोड में परिवर्तन: -

addClassToCart() see else condition true
addPackToCart() see else condition false

तो, क्यों बूलियन है -

if($_POST['isClass'] === true) 
     { 
      echo "see if condition ".$_POST['isClass']; 
     } 
     else 
     { 
      echo "see else condition ".$_POST['isClass']; 
     } 

इन outputs हैं परिवर्तनीय यहाँ एक स्ट्रिंग के रूप में इलाज किया? क्या मैं पैरामीटर पोस्ट करने में कुछ गलत कर रहा हूं?

धन्यवाद, Sandeepan

+4

यह निश्चित रूप से * अप्रत्याशित * नहीं है। सब कुछ 'GET' या' POST' के माध्यम से PHP से गुजरता है तार हैं। – NullUserException

+0

हाँ अब मैं देख रहा हूं ... मेरे प्रश्न शीर्षक संपादित –

उत्तर

41

आप कुछ भी गलत दर असल नहीं कर रहे हैं, यह सिर्फ है कि जब यह पोस्ट हो जाती है, तो वह ऐसा दिखाई देता है:

operation=add_cart&isClass=true&itemId=1234 

पीएचपी क्या डेटा नहीं बता सकता प्रकार क्योंकि यह पारित नहीं किया जाता है, यह हमेशा सिर्फ पोस्ट डेटा की एक स्ट्रिंग है, तो, "true" की तुलना अपने चेक करने के लिए इस तरह:

if($_POST['isClass'] === "true") 
{ 
    //Code to add class to session cart 
} 
else 
{ 
    //Code to add pack to session cart 
} 
+0

तो क्या कोई और रास्ता नहीं है? मैं जितना संभव हो बुलियन चेक करना पसंद करते हैं। –

+0

@ संदीपन क्यों? – NullUserException

+2

@ सांडिपन - नहीं, सुनिश्चित नहीं है कि इसके अलावा और क्या कहना है ... इस प्रकार http प्राप्त होता है और पोस्ट करता है, यह बिल्कुल सामान्य है। –

1
  1. स्ट्रिंग जेएसओएन के रूप में अपने जावास्क्रिप्ट से डेटा भेजें।
  2. स्ट्रिंग्स 'सत्य' और 'झूठी' को बूलियन मान में बदलने के लिए एक PHP फ़ंक्शन बनाएं।

व्यक्तिगत रूप से मुझे # 2 पसंद है, जो निक क्रेवर के उत्तर के साथ जाता है।

+0

नंबर 1 बहुत बेहतर काम करता है जब आप जिस वस्तु को सहेजना चाहते हैं वह बहु-स्तरित है .. कोई बदसूरत रिकर्सिव php फ़ंक्शंस केवल xson_decode –

14

यह एक पुराना सवाल है, लेकिन मुझे आश्चर्य है कि किसी ने इसे यहां समाधान के रूप में पोस्ट नहीं किया है।

जब आप अपने AJAX अनुरोधों का निर्माण कर रहे हों तो बस सही और गलत के बजाय 1 और 0 का उपयोग करें। जब आप == तुलना करते हैं, तो उन्हें वास्तविक/गलत के रूप में व्याख्या किया जाएगा।

जे एस:

$.ajax({ 
    url: '....', 
    data: { 
    foo: 1, 
    bar: 0 
    } 
}); 

पीएचपी:

<?php 
    if ($_GET['foo']) { 
    //... 
    } else { 
    //... 
    } 

    echo $_GET['bar'] ? 'bar is true' : 'bar is false'; 
?> 
58

इसके अलावा, आप फिल्टर FILTER_VALIDATE_BOOLEAN साथ समारोह filter_var उपयोग कर सकते हैं। PHP दस्तावेज के अनुसार यह

"1", "सत्य", "चालू" और "हां" के लिए सत्य लौटाता है। अन्यथा गलत लौटाता है। यदि FILTER_NULL_ON_FAILURE सेट किया गया है, तो FALSE केवल "0", "false", "off", "no", और "" के लिए वापस लौटाया जाता है, और सभी गैर-बूलियन मानों के लिए NULL वापस आ जाता है।

तो पोस्ट पैरामीटर प्राप्त तरह दिखेगा:

$isClass = filter_var ($_POST['isClass'], FILTER_VALIDATE_BOOLEAN); 
+6

+1 'filter_var' के लिए +1 है, जो PHP के अक्सर अनदेखा भागों में से एक है। – mcrumley

+1

इस के लिए यहां आया :) –

+4

सुंदर! एक बूलियन की तरह यह एक स्ट्रिंग था Imo बदसूरत और fubar था। – Spock

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