मैं बिना किसी सफलता के wp AJAX अनुरोध हैंडलर में कुकी सेट करने का प्रयास कर रहा हूं।
आशा है कि कोई मेरी मदद कर सकता है।

क्लाइंट-साइड कोड यहां दिया गया है:

var foo = $('#foo');
$.ajax({
    url: 'http://127.0.0.1/wordpress/wp-admin/admin-ajax.php',
    type:   'post',
    dataType:   'json',
    cache:  'false',
    data: { 'action' : 'foo', 'foo' : foo.val(), 'nonce' : foo.data('nonce') },
    success: function(data) { console.debug(data) },
    error: function() { console.error('fail') }
});

यहाँ प्लगइन है:

function foo() {
    check_ajax_referer( 'foo-my-nonce', 'nonce', 'what?!' );

    if (isset($_POST['foo'])) {
        $dir = pathinfo($_SERVER['REQUEST_URI']);
        $dir['dirname'] = $dir['dirname'].'/';
        setcookie('foo', $_POST['foo'], time()+62208000, $dir['dirname'], $_SE    RVER['HTTP_HOST']);

        $output = array('response' => 'success', 'message' => 'have fun');
    }
    else
        $output = array('response' => 'failed', 'message' => 'you are a loser');

    header("Content-type: application/json");
    echo json_encode( $output );
    exit;
 }

 add_action('wp_ajax_nopriv_foo','foo');
4
G.G. 2 पद 2011, 17:57
आप क्या देख रहे हैं जो दिखाता है कि यह काम नहीं कर रहा है?
 – 
Jonathan M
2 पद 2011, 18:03
यह स्पष्ट रूप से एक उदाहरण है! मेरा असली फ़ंक्शन निष्पादित किया गया है और सेटकुकी() को छोड़कर कुछ भी ठीक हो जाता है, मैंने इस फ़ंक्शन को डीबग नहीं किया है क्योंकि मुझे नहीं पता कि इसे अजाक्स तरीके से कैसे किया जाए
 – 
G.G.
2 पद 2011, 20:41
आप कैसे जानते हैं कि यह काम नहीं कर रहा है? आप क्या देख रहे हो? यह क्या कर रहा है?
 – 
Jonathan M
2 पद 2011, 21:20
तो मैं उसी फ़ंक्शन और उस कार्य में एक कस्टम फ़ील्ड अपडेट करता हूं। इसके अलावा मैं $_COOKIE['foo'] पर एक चेक करता हूं और यह सेट नहीं है (एक गैर AJAX फ़ंक्शन में)
 – 
G.G.
2 पद 2011, 22:04
धन्यवाद। यह मेरे लिए बहुत अच्छा काम करता है! मैंने अपनी वेबसाइट के लिए कुछ बदलावों के साथ एक अनुकूलित संस्करण बनाया है जैसे कुकी जांच के आधार पर विभिन्न ईमेल पते आउटपुट करना और अनुरोध पर लोडिंग gif प्रदर्शित करना आदि।
 – 
Adriano Monecchi
25 जिंदा 2018, 22:39

1 उत्तर

सबसे बढ़िया उत्तर

ठीक है दोस्तों मैंने इसे ठीक कर दिया। इसे काम करने के लिए आपको वर्तमान 'पोस्ट' या 'डायरनाम' के बजाय कुकी पथ को वेबसाइट के "/" (रूट) पर सेट करना होगा:

के बजाए:

setcookie('foo', $_POST['foo'], time()+62208000, $dir['dirname'], $_SERVER['HTTP_HOST']);

उपयोग:

setcookie('foo', $_POST['foo'], time()+62208000, '/', $_SERVER['HTTP_HOST']);

10
random_user_name 11 जून 2015, 20:16
8
टिप: हार्ड-कोडेड पथ और $_SERVER चर का उपयोग करने के बजाय, कुछ WP स्थिरांक का उपयोग करना पसंद किया जाता है: COOKIEPATH और COOKIE_DOMAIN - उदाहरण: setcookie('foo', $_POST['foo'], time()+62208000, COOKIEPATH, COOKIE_DOMAIN);
 – 
random_user_name
11 जून 2015, 20:19