2013-02-05 50 views
7

मैं अजाक्स कॉल में कुछ डेटा भेज रहा हूं। मूल्यों में से एक एक बूलियन सेट गलत है। यह हमेशा अजाक्स द्वारा लिखित PHP स्क्रिप्ट में TRUE के रूप में मूल्यांकन किया जाता है। कोई विचार?jQuery AJAX डेटा में एक बूलियन मान भेजें

$.ajax({ 
    type: "POST", 
    data: {photo_id: photo_id, 
      vote: 1, 
      undo_vote: false}, // This is the important boolean! 
    url: "../../build/ajaxes/vote.php", 
    success: function(data){ 
     console.log(data); 
    } 
}); 

vote.php में, स्क्रिप्ट कि अजाक्स ऊपर में कहा जाता है, मैं बूलियन मान की जाँच करें:

if ($_POST['undo_vote'] == true) { 
    Photo::undo_vote($_POST['photo_id']); 
} else { 
    Photo::vote($_POST['photo_id'], $_POST['vote']); 
} 

लेकिन $_POST['undo_vote'] == true हालत हमेशा पूरा किया जाता है।

+5

आप की कोशिश की 'है ($ _POST ['undo_vote'] == 'सत्य') {'? (मैं उम्मीद करता हूं कि अनुरोध पैरामीटर स्ट्रिंग के रूप में प्राप्त किए जाएंगे जबतक कि आप JSON की स्ट्रिंग पास नहीं करते हैं और व्यक्तिगत गुणों का परीक्षण करने से पहले सर्वर-पक्ष को पार्स करते हैं।) – nnnnnn

+0

हां, चर स्ट्रिंग के रूप में पोस्ट किए जाते हैं। स्ट्रिंग "झूठी" के लिए परीक्षण हमेशा सच है। – showdev

+1

एन सही है। सभी GET/POST पैरामीटर स्ट्रिंग हैं, और "गलत" 'एक सत्य मान है। –

उत्तर

12

एक पोस्ट सिर्फ टेक्स्ट है, और पाठ php में सत्य के रूप में मूल्यांकन करेगा। झूठी जगह के बजाय शून्य भेजने के लिए एक त्वरित फिक्स होगा। आप PHP में अपने सच्चे चारों ओर उद्धरण भी डाल सकते हैं।

if ($_POST['undo_vote'] == "true") { 
    Photo::undo_vote($_POST['photo_id']); 
} else { 
    Photo::vote($_POST['photo_id'], $_POST['vote']); 
} 

फिर आप सही/गलत पाठ में गुजर सकते हैं। यदि आप यही पसंद करते हैं।

+0

क्या बूलियन 0 या 1 के रूप में भेजने का बुरा अभ्यास है? क्या मुझे कुछ JSON एन्कोडिंग करना चाहिए, या टाइप को मजबूत बनाने के लिए कुछ और करना चाहिए? –

+0

आपका उत्तर सही है और जिस तरह से काम करता है, बस स्वीकार करने के लिए 8 मिनट की आवश्यकता है :) –

+0

@DonnyP यह वास्तव में स्वाद का विषय है। अधिकांश प्रोग्रामर जानते हैं कि कैसे 1 और 0 सच/गलत के लिए काम करते हैं, लेकिन यह कहां उपयोग किया जा रहा है इसके आधार पर यह JSON का उपयोग करने के लिए स्पष्ट हो सकता है। –

0

आप अनुरोध डेटा भेजने के लिए JSON.stringify() का उपयोग कर सकते हैं:

data : JSON.stringify(json)

और सर्वर पर डिकोड:

$data = json_decode($_POST);

0

आप 0 और 1 undo_vote के लिए इस्तेमाल करते हैं और php में यह डाली लिख सकते हैं:

जे एस पक्ष:

undo_vote: 0 // false 

सर्वर साइड:

$undovote = (bool) $_POST['undo_vote']; // now you have Boolean true/false 

if($undovote) { 
    // True, do something 
} else { 
    // False, do something else 
}