Skip to main content
 首页 » 编程设计

jquery之Wordpress 301 Moved Permanently 响应 Jquery.post 请求

2026年07月28日13findumars

我对找到问题的解决方案已经失去了希望,希望有人可以帮助我。问题是这样的:

我有一个 WordPress 安装,其中有一个名为 wp_lojas 的额外表(用于商店)。客户可以访问该网站并通过表格输入他们的地址,然后使用 Google Maps Api 找到他们附近的商店。

当用户提交表单时,我会验证他们的地址位置(纬度/经度),并通过 SQL 查询寻找最近的商店。

表单通过ajax请求($.post())将参数(纬度/经度/半径)发送到我的主题文件夹(/wp-content/themes/accessorize/dadosLojas.php)内的php文件该文件使用找到的存储构建一个 XML。

在我的本地计算机上,离线时一切正常。我在网上得到了答案“301永久移动”。如果你们安装了Firebug并想尝试一下,测试链接是http://www.colletivo.com.br/accessorize/表格位于页面的页脚。如果你们想要巴西的地址,请尝试“Rua Vicente Leporace, 1534”。

如果您不明白我试图解释的内容,或需要更多信息,请告诉我。

非常感谢。

请您参考如下方法:

根据 Greg Pettit 给出的提示,问题已解决!

我不知道 Wordpress 拦截 ajax 请求的可能性,我认为这与 htaccess 将请求重定向到不存在的 url 有关。

知道了这一点,我研究了如何使用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 类发送一个 POST ajax 'wp-admin/admin-ajax.php':

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); 
        } 
    } 
); 

就是这样!感谢 Greg Pettit 澄清了我的想法。

一个对我也有帮助的链接是 5 tips for using ajax in wordpress

我希望这个答案有一天能对某人有所帮助。