2010-09-24 9 views
2

Si vous souhaitez recréer l'erreur, rendez-vous sur www.tlcnz.com et cliquez sur le lien nous contacter dans le menu horizontal sous la bannière Masthead. Dans l'intérêt du site n'étant pas totalement non fonctionnel, j'ai supprimé la chaîne de requête entièrement de tous les autres liens et les ai remplacés par des fichiers individuels pour chacun d'entre eux - à l'exception du lien vers le formulaire de contact. J'ai besoin d'une solution générique pour certaines fonctionnalités que le fichier menu.swf utilise. De plus, il était agréable et élégant. Tout cela a l'habitude de travailler ... Je suis mystifié de la façon dont j'ai réussi à le casser.Ajax requête sur le fichier php avec la chaîne de requête provoque 404

My Javascript is here. Voici le PHP que j'utilise. C'est bloader.php qui Ajax revient avec une 404 sur

<?php 
header("Cache-Control: no-cache, must-revalidate"); // HTTP/1.1 
header("Expires: Sat, 26 Jul 1997 05:00:00 GMT"); // Date in the past 
?> 
<?PHP require_once('blog/wp-blog-header.php');?> 
<?PHP 
$name = $_GET['name']; 
query_posts('pagename='.$name);while (have_posts()): the_post(); ?> 
<h2><?php the_title(); ?></h2> 
<?php the_content(''); ?> 
<?php endwhile; ?> 

Et voici about.php qui fonctionne et est exactement le même. Il ne prend tout simplement pas de chaîne de requête.

<?PHP require_once('blog/wp-blog-header.php'); ?> 
<?php 
header("Cache-Control: no-cache, must-revalidate"); // HTTP/1.1 
header("Expires: Sat, 26 Jul 1997 05:00:00 GMT"); // Date in the past 
?> 
<?PHP $name = "about"; 
query_posts('pagename='.$name);while (have_posts()): the_post(); ?> 
<h2><?php the_title(); ?></h2> 
<?php the_content(''); ?> 
<?php endwhile; ?> 
+0

Vous avez oublié le lien vers votre JS ... il serait préférable de simplement le coller dans votre message. Rappelez-vous de ne coller que la partie importante et de supprimer les éléments sans rapport. –

+0

quel lien utilisez-vous? vous faites probablement quelque chose de mal à coller l'obtenir dans l'url. –

+0

J'ai posté le javascript, qui est accessible ici http://www.tlcnz.com/scripts.js. Je sais ce qu'est une erreur 404, les fichiers sont tous là. Si vous copiez l'emplacement du lien à partir de la section contactez-nous et collez-le dans votre navigateur, vous verrez que cela fonctionne très bien, et si je désactive la chaîne de requête, cela fonctionne très bien. – urbanvintner

Répondre

0

Je ne sais pas si cela est lié ou si elle est même la même chose dans l'original: Est-ce require_once('blog/wp-blog-header.php'); quoi que ce soit de sortie (y compris les lignes vides)? Header() doit être appelé avant toute sortie.

+0

est-ce toujours le cas lorsque le contenu est chargé dynamiquement dans un élément existant? Aussi, je demande le même fichier sur tous les autres fichiers php sans chaînes de requête et aucune erreur – urbanvintner

1

Je l'ai résolu. C'était le nom de la variable. Je suppose que mon wordpress a récemment mis à jour (ce qui est le <?PHP require_once('blog/wp-blog-header.php');?> fait en quelque sorte que nom de variable lancer une 404 lorsque son inclus dans une chaîne de requête. Tout cela est un peu voodoo si

0

Quel est le nouveau nom de la variable ?. utilisez-vous un cadre JS comme jQuery ou MooTools

Presque le même problème ici, mais je suppose que cela est dû à la valeur de la variable non le nom Laissez-moi vous expliquer: J'utilise un fichier modèle personnalisé pour Ajax inclusion (et chargement wp-blog-header.php) comme bloader.php fait

Javascript détecte les liens internes (Ceci assure la compatibilité lorsque JS est désactivé) et convertir les URL afin de les faire pointer vers le php de chargement, comme ceci:

var BlogURL = "http://www.domain.com"; 
var TemplateURL = "http://www.domain.com/wp/wp-content/themes/mytheme"; 
if(PassedUrl.indexOf("?page_id=") != -1) { 
         AjaxUrl = PassedUrl.replace(BlogURL + "/?page_id=",TemplateURL + "/pagecontent.php?pageid="); 
         } 
         else { 
         AjaxUrl = PassedUrl.replace(BlogURL + "/",TemplateURL + "/pagecontent.php?pagename="); 
         } 

Ensuite pagecontent.php traite la variable chaîne de requête d'URL pour attraper le contenu à inclure:

<?PHP define('WP_USE_THEMES', false); 
$wp_blogheader = ("../../../wp-blog-header.php"); 
require_once($wp_blogheader); 
if(isset($_GET['pageid'])) { 
    $pag = $_GET['pageid']; 
} 
elseif(isset($_GET['pagename'])) { 
    $pag = $_GET['pagename']; 
} 

global $post; 

// TRANSLATION FUNCTIONS OMITTED 

if(isset($_GET['p'])) { 
    $page_data = get_post($pag); 
} 
if(isset($_GET['pageid'])) { 
    $page_data = get_page($pag); 
} 
elseif(isset($_GET['pagename'])) { 
    if(function_exists('qTranslateSlug_get_page_by_path')) { 
    $pag = qTranslateSlug_get_page_by_path($pag, $q_config['language']); 
    $page_data = get_page($pag);} 
    else { $page_data = get_page_by_path($pag);} 
} 

$content = $page_data->post_content; // Get Content 
$title = $page_data->post_title; // Get title 
echo do_shortcode($content); 
?> 

Depuis que je suis en utilisant le plugin qTranslate pour avoir un contenu plusieurs langues disponibles sur une page, certaines fonctionnalités doit être vérifié. C'est là que je reçois des erreurs 404. Fondamentalement, les fonctions de traduction dépouillent le code de langue de la variable de nom de page, transmise dans la chaîne d'URL, pour obtenir la page par défaut (la seule qui existe réellement). Ce code de langue est donc stocké et appliqué en php, pour filtrer le contenu par la langue appropriée (puisque dans pagecontent.php il commence par défaut).

Ainsi, lorsque l'URL de l'appel Ajax est www.domain.com/wp/wp-content/themes/mytheme/pagecontent.php?pagename= my_page/my_subpage il fonctionne

mais quand c'est www.domain.com/wp/wp-content/themes/mytheme/pagecontent.php?pagename= fr/mon_page/mon_subpage il jette une erreur 404 et rien ne s'affiche.

Après quelques tests de débogage, la seule différence était la valeur de variable dans l'URL, l'entrée $pag = $_GET['pagename']; à la fonction de traduction. En fait, la sortie (avant la requête DB) est la même, corrigez-la comme elle devrait l'être en fonction de l'objectif de la fonction.

La chose la plus étrange est que la console Firebug montre le 404 (comme le journal d'accès au serveur) mais le contenu brut de la réponse et les onglets HTML affichent la bonne page! En outre, lors de l'ouverture www.domain.com/wp/wp-content/themes/mytheme/pagecontent.php?pagename= fr/my_page/my_subpage dans une autre fenêtre, il affiche (statut html 200, pas 404). Évidemment, changer la variable "nom_page" en "nom_page" n'a aucun effet. Tout fonctionnait bien avant de passer à WP 3.0.1, ce qui m'amène à penser que mon Javascript et mon php d'inclusion/traduction sont toujours corrects, où quelque chose dans la nouvelle version de WP pourrait pré-analyser la requête personnalisée chaîne et le bloquer en fonction de ses critères de page par défaut.

Cependant, je n'arrive toujours pas à comprendre comment et dans quel cas un problème php/faute d'orthographe pourrait entraîner un 404 de XMLHttpRequest.

Questions connexes