2011-02-08 13 views
7
$.ajax({ 
    url : uri, 
    type : 'post', 
    data : {someBooleanVar1: false, subVar: {someBooleanVar2: true}} 
}); 

समस्या यह है कि सर्वर someBooleanVar1 और someBooleanVar2 पर तार के रूप में प्राप्त हो जाएगा, लेकिन नहीं "0" के रूप में "गलत" और "सही" और "1"। स्वचालित रूप से पर कोई भी तरीका नहीं है बूलियन तर्कों को "1" और "0" में परिवर्तित करें?jQuery.ajax() और भेजने बूलियन अनुरोध तर्क

उत्तर

2

@jcubic उत्तर की एक निश्चित संस्करण नहीं है। अगर आप AJAX को कॉल करते हैं और डेटा सेट नहीं है तो यह एक त्रुटि देता है। यह देखने के लिए एक परीक्षण जोड़ा गया कि बूलियन को परिवर्तित करने से पहले डेटा प्रॉपर्टी सेट की गई है या नहीं। मैं अंडरस्कोर इस्तेमाल किया, देशी js समारोह hasownprop साथ इसे बाहर स्वैप के लिए स्वतंत्र महसूस ...

function convertBoolToNum(obj) { 
    $.each(obj, function(i) { 
    if (typeof obj[i] == 'object') { 
     convertBoolToNum(this); 
    } 
    else if (typeof obj[i] == 'boolean') { 
     obj[i] = Number(obj[i]); 
    } 
    }); 
} 

$.ajax = (function($ajax) { 
    return function(options) { 
    if (_.has(options, 'data')) { 
     convertBoolToNum(options.data); 
    } 
    return $ajax(options); 
    }; 
})($.ajax); 
0

नहीं वास्तव में स्वचालित रूप से लेकिन 0 जोड़ने 0 या 1 के लिए बुलियन में परिवर्तित कर देंगे:

data : {someBooleanVar1: false + 0, someBooleanVar2: true + 0} 
+0

तो मुझे हर बार कुछ तर्क पारित करने की आवश्यकता होगी जो बुलियन हो सकता है? जी नहीं, धन्यवाद! – barbushin

+0

@ वरिष्ठ आप क्या उम्मीद करते हैं? कुछ प्रकार की वैश्विक जेएस सेटिंग जो बूलियन को 1 या 0 बनने का कारण बनती है ?? –

+1

इस मामले के लिए jQuery में कुछ बहुत ही कस्टम विकल्प/विधियां हो सकती हैं। हो सकता है कि एक छोटा जावास्क्रिप्ट कोड हो जो स्वचालित रूप से इस रूपांतरण को कर सके। – barbushin

1

इस प्रयास करें, यह स्वतः ही बूलियन्स मूल्यों नंबरों के लिए डेटा विकल्पों में परिवर्तित करना चाहिए।

function convertBoolToNum(obj) { 
    $.each(obj, function(i) { 
     if (typeof obj[i] == 'object') { 
      convertBoolToNum(this); 
     } 
     else if (typeof obj[i] == 'boolean') { 
      obj[i] = Number(obj[i]); 
     } 
    }); 
} 

$.ajax = (function($ajax) { 
    return function(options) { 
    convertBoolToNum(options.data); 
    return $ajax(options); 
    }; 
})($.ajax); 
+0

बहुत अच्छा विचार है! केवल एक गलती है कि रूपांतरण वस्तु रिकर्सिव नहीं है, इसलिए यह {var: {subVar: false}} के साथ काम नहीं करेगी। मैंने इसे ठीक कर दिया है, मुझे नीचे जवाब देखें। – barbushin

0

यह यी जियांग के जवाब के लिए एक ठीक है:

$.ajax = (function($ajax) { 
    return function(options) { 
    if (options.data != undefined) { 
     for (var i in options.data) { 
      if (options.data.hasOwnProperty(i) && 
       (typeof options.data[i] == "boolean")) { 
      options.data[i] = Number(options.data[i]); 
      } 
     } 
    }   
    return $ajax(options); 
    }; 
})($.ajax); 
1

मुझे पता है इस पोस्ट के एक सा पुराना है, लेकिन मैं अभी भी इस जानकारी ^^ मैं PHP के लिए वार्स पारित पारित करने के लिए करना चाहता था और उन लोगों के साथ पकड़ने:

filter_var($var, FILTER_VALIDATE_BOOLEAN, FILTER_NULL_ON_FAILURE); 

इस तरह मैं बूलियन्स true=1 और false= स्ट्रिंग के रूप में झूठी में तार कर देते हैं php

में रिक्त है

शायद मैं गलत सवाल पढ़ सकता हूं। लेकिन यह वही है जो मैंने समझा है :) ऊपर दिए गए कोड के साथ आप आसानी से एक फ़ंक्शन बना सकते हैं और जितना चाहें उतना काम करने के लिए और अधिक फ़िल्टर जोड़ सकते हैं :)

0

यहां एक और अधिक अनुकूलित संस्करण है जो वैश्विक नामस्थान को प्रदूषित नहीं करता है , मूल्यों को दोबारा बदलता है, संभावित अपरिभाषित डेटा संपत्ति का ख्याल रखता है, और बूलियन मानों को उनके संबंधित पूर्णांक मानों में परिवर्तित करने के लिए उचित विधि का उपयोग करता है।

$.ajax = (function($ajax) { 
    return function(options) { 
     (function (obj) { 
      var _fn = arguments.callee; 
      $.each(obj, function(i) { 
       if (typeof obj[i] == 'object') { 
        _fn(this); 
       } else if (typeof obj[i] == 'boolean') { 
        obj[i] = ~~obj[i]; 
       } 
      }) 
     })(options.data || {}); 
     return $ajax(options); 
    }; 
})($.ajax);  

मुझे अभी भी लगता है कि यह बहुत चौंकाने वाला है कि यह अनुरोध भेजने से पहले jQuery द्वारा आंतरिक रूप से नहीं किया जाता है।

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