2011-11-28 15 views
5

मैंने अपनी समस्या का हल ढूंढने की मेरी आशा खो दी है, उम्मीद है कि कोई मेरी मदद कर सकता है। यहां समस्या है:वर्डप्रेस 301 Jquery.post अनुरोध पर स्थायी प्रतिक्रिया

मेरे पास wp_lojas (दुकानों के लिए) नामक एक अतिरिक्त तालिका के साथ एक WordPress स्थापना है। ग्राहक साइट पर और किसी फॉर्म के माध्यम से जा सकते हैं, अपना पता डाल सकते हैं, और Google मानचित्र एपीआई का उपयोग करके, उनके पास स्टोर ढूंढ सकते हैं।

जब उपयोगकर्ता फॉर्म सबमिट करता है, तो मैं उनकी पता स्थिति (अक्षांश/देशांतर) सत्यापित करता हूं और एक SQL क्वेरी के माध्यम से मैं निकटतम स्टोर ढूंढता हूं।

फॉर्म एक AJAX मांग ($ .post()) के माध्यम से मेरे विषय फ़ोल्डर (/wp-content/themes/accessorize/dadosLojas.php) के अंदर एक php फ़ाइल में पैरामीटर (अक्षांश/देशांतर/त्रिज्या) भेजता है।) और वह फ़ाइल पाया गया स्टोर के साथ एक एक्सएमएल बनाता है।

सब कुछ मेरी स्थानीय मशीन पर ऑफ़लाइन ठीक काम करता है। ऑनलाइन मुझे एक जवाब मिलता है "301 स्थायी रूप से हटाया गया"। यदि आपके पास फ़ायरबग इंस्टॉल है और कोशिश करना चाहते हैं, तो परीक्षण लिंक http://www.colletivo.com.br/accessorize/ है और यह फ़ॉर्म पृष्ठ के पाद लेख पर है। यदि आप ब्राजील से एक पता चाहते हैं, तो "रुआ विक्सेन्ट लेपोरस, 1534" आज़माएं।

यदि आपको समझ में नहीं आया कि मैंने क्या समझाया है, या अधिक जानकारी की आवश्यकता है, तो कृपया मुझे बताएं।

बहुत बहुत धन्यवाद।

उत्तर

1

संकेत के साथ हल समस्या ग्रेग पेटीट ने दिया!

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

यह जानने के बाद, मैं कैसे Wordpress के कार्यों का उपयोग कर ajax अनुरोध करने के लिए शोध किया और यहाँ समाधान है: मेरे विषय के functions.php में

:

// Hooks wp_ajax that points to the function that builds the XML Stores 
add_action('wp_ajax_procura_lojas','procuraLojas'); // Unlogged User 
add_action('wp_ajax_nopriv_procura_lojas','procuraLojas'); // Logged User 

// Function that Builds Stores XML 
function procuraLojas() { 

    global $wpdb; 

    // Retrieve $_POST informattion coming from jQuery.post 
    $lat = $_POST["latitude"]; 
    $lon = $_POST["longitude"]; 
    $raio = $_POST["raio"]; 

    // Query wp_lojas and Build XML 
    $consulta = $wpdb->get_results(sprintf("SELECT * , (3959 * acos(cos(radians('%s')) * cos(radians(latitude)) * cos(radians(longitude) - radians('%s')) + sin(radians('%s')) * sin(radians(latitude)))) AS distancia FROM wp_lojas HAVING distancia < '%s' ORDER BY distancia", 
    mysql_real_escape_string($lat), 
    mysql_real_escape_string($lon), 
    mysql_real_escape_string($lat), 
    mysql_real_escape_string($raio))); 

    $dom = new DOMDocument("1.0", "utf-8"); 
    $no = $dom->createElement("lojas"); 
    $parnode = $dom->appendChild($no); 

    header("Content-type: text/xml"); 

    foreach ($consulta as $loja){ 

     $no = $dom->createElement("loja"); 
     $novono = $parnode->appendChild($no); 

     $novono->setAttribute('nome',   $loja->nome); 
     $novono->setAttribute('lat',   $loja->latitude); 
     $novono->setAttribute('lon',   $loja->longitude); 
     $novono->setAttribute('telefone',  $loja->telefone); 
     $novono->setAttribute('email',   $loja->email); 
     $novono->setAttribute('endereco',  $loja->endereco); 
     $novono->setAttribute('numero',   $loja->numero); 
     $novono->setAttribute('complemento',  $loja->complemento); 
     $novono->setAttribute('bairro',   $loja->bairro); 
     $novono->setAttribute('cidade',   $loja->cidade); 
     $novono->setAttribute('estado',   $loja->estado); 
     $novono->setAttribute('cep',   $loja->cep); 
     $novono->setAttribute('distancia',  $loja->distancia); 

    } 

    // Print XML and Exit 
    echo $dom->saveXML(); 
    exit; 

} 

Wordpress के शीर्षक मैं डाल में :

<script type='text/javascript'> 
/* <![CDATA[ */ 
var MyAjax = { ajaxurl: "<?php bloginfo('url'); ?>/wp-admin/admin-ajax.php" }; // Build the Link to admin-ajax.php/Javascript Global Variable 
/* ]]> */ 
</script> 

उपयोगकर्ता प्रपत्र सबमिट करता है, मैं Wordpress के वर्ग है कि यह 'WP-व्यवस्थापक/व्यवस्थापक ajax.php' के लिए जिम्मेदार है के लिए एक पोस्ट ajax भेजें:

jQuery.post(
    MyAjax.ajaxurl, // Link to the file 'wp-admin/admin-ajax.php' responsible for handling ajax requisitions 
    { 
     action : 'procura_lojas', // Name used in the hook 'wp_ajax_procura_lojas' 
     latitude : center.lat(), // Latitude Parameter 
     longitude : center.lng(), // Longitude Parameter 
     raio : raio // Radius Parameter 
    }, 
    function(data) { // Callback 

     // Retrieve all nodes called 'loja' and put it in the map 
     var markers = data.documentElement.getElementsByTagName("loja"); 
     for (var i = 0; i < markers.length; i++) { 
      var dados = []; 
      dados["nome"] = markers[i].getAttribute('nome'); 
      dados["estado"] = markers[i].getAttribute('estado'); 
      dados["cidade"] = markers[i].getAttribute('cidade'); 
      dados["bairro"] = markers[i].getAttribute('bairro'); 
      dados["endereco"] = markers[i].getAttribute('endereco'); 
      dados["numero"] = markers[i].getAttribute('numero'); 
      dados["complemento"] = markers[i].getAttribute('complemento'); 
      dados["cep"] = markers[i].getAttribute('cep'); 
      dados["telefone"] = markers[i].getAttribute('telefone'); 

      var latlng = new google.maps.LatLng(parseFloat(markers[i].getAttribute('lat')), parseFloat(markers[i].getAttribute('lon'))); 
      var marker = createMarker(markers[i].getAttribute("name"), latlng, dados); 
     } 
    } 
); 

यही है! मेरे विचारों को स्पष्ट करने के लिए धन्यवाद ग्रेग पेटीट।

एक लिंक है कि मुझे मदद करता भी था 5 tips for using ajax in wordpress

मुझे आशा है कि इस सवाल का जवाब किसी एक दिन में मदद कर सकते हैं।

0

वर्डप्रेस किसी भी दिए गए PHP फ़ाइल पर आपके AJAX अनुरोधों को सह-चयन करेगा। यह मेरे लिए सभी काले जादू है, इसलिए एक बेहतर उत्तर वाला कोई व्यक्ति जल्द ही आने की संभावना है। हालांकि, यह कहने के लिए पर्याप्त है कि आपको अपने AJAX अनुरोधों को एक विशेष स्क्रिप्ट के माध्यम से पाइप करने की आवश्यकता है जिसे उचित रूप से अनुरोध को रूट करने के लिए डिज़ाइन किया गया है। डिफ़ॉल्ट रूप से, यह AJAX-admin.php के साथ किया जाता है (या यह व्यवस्थापक-AJAX.php था?)

मेरी इच्छा है कि मेरे पास अधिक जानकारी हो, लेकिन मैं कम से कम आपको यह बताना चाहता था कि इससे पहले कि आप भी जाएं कई सर्कल, वर्डप्रेस में एक कस्टम स्क्रिप्ट के लिए AJAX अनुरोधों को संभालने के लिए आपको एक विशेष तरीका है।

+0

मैं समझता हूं! खैर, मुझे लगता है कि मैं उस पथ की खोज कर सकता हूं। धन्यवाद –

0

मेरे पास आज भी एक ही अजीब समस्या थी लेकिन ग्राहक भूमिका में केवल प्रभावित उपयोगकर्ता ही थे। सभी बुराइयों की जड़ एक छोटा सा काम था जो ग्राहकों को बैकएंड तक पहुंचने से रोकना चाहिए।

function preventAccessToBackend() {  
    if(!current_user_can('edit_posts')) { 
     wp_redirect(home_url()); exit; 
    } 
} 
add_action('admin_init', 'preventAccessToBackend'); 

आप देख सकते हैं, समारोह admin_init हुक से जुड़ी है और इसलिए एक व्यवस्थापक को फांसी दे और यह भी एक AJAX फोन पर है।

समाधान सरल था। बस यह जांचें कि यह रीडायरेक्ट से पहले AJAX अनुरोध है या नहीं।

function preventAccessToBackend() {  
    if (defined('DOING_AJAX') && DOING_AJAX) { return; } 

    if(!current_user_can('edit_posts')) { 
     wp_redirect(home_url()); exit; 
    } 
} 
add_action('admin_init', 'preventAccessToBackend'); 
संबंधित मुद्दे