31 votes

jQuery Ajax renvoyant une erreur 404, mais réponse correcte

Je suis l'affichage des données à un script PHP via AJAX de jQuery, et tout ce qu'il s'exécute correctement, mais il renvoie une erreur 404. Dans ma console Firebug la réponse du script PHP est correct. Je ne comprends pas comment le script peut répondre, et il est encore de jeter une erreur 404. Le jQuery "erreur" de la méthode de rappel déclenche, et le "succès" de la méthode qui ne fonctionne pas.

Toutes les déclarations effectuées par le script PHP fonctionne correctement, parce que je peux voir la base de données mises à jour, etc.

J'utilise jQuery 1.4.2, sur un WordPress 3.x site est hébergé par Dreamhost.

-----------PLUS D'INFOS-----------

OK, j'ai compris que quand j'inclus WordPress, wp-blog-header.php le fichier dans le script Ajax, j'obtiens l'erreur. Aussi, une fois ces scripts travail, et je suis sûr à 90% qu'ils ont arrêté de travailler après l'WP 3.0 mise à jour. Je vais coller dans les en-têtes de Réponse de Firebug.

Cet en-tête de réponse de PHP qui inclut la wp-blog-header.php et renvoie une erreur 404 dans Firebug...

Date                Tue, 10 Aug 2010 01:44:44 GMT
Server            Apache
X-Powered-By        PHP/5.2.6
X-Pingback        http://www.learnwake.com/xmlrpc.php
Expires          Wed, 11 Jan 1984 05:00:00 GMT
Cache-Control       no-cache, must-revalidate, max-age=0
Pragma            no-cache
Last-Modified       Tue, 10 Aug 2010 01:44:44 GMT
Vary                Accept-Encoding
Content-Encoding    gzip
Content-Length    36
Keep-Alive        timeout=2, max=98
Connection        Keep-Alive
Content-Type        text/html; charset=UTF-8

Cet en-tête de réponse de la part de PHP qui ne comprennent pas les wp-blog-header.php et renvoie un 200 OK dans Firebug...

Date                Tue, 10 Aug 2010 01:44:58 GMT
Server            Apache
X-Powered-By        PHP/5.2.6
Vary                Accept-Encoding
Content-Encoding    gzip
Content-Length    36
Keep-Alive        timeout=2, max=100
Connection        Keep-Alive
Content-Type        text/html

47voto

Tim Stone Points 13966

Lorsque vous incluez wp-blog-header.php,, en fin de démarrage de l'ensemble du programme d'installation de WordPress routine. La fonction wp() est appelé, qui demande $wp->main(), qui appelle à son tour les diverses fonctions de configuration.

L'un de ces est - $wp->query_posts(), qui demande $wp_the_query->query(), qui à son tour appelle WP_Querys' parse_query() fonction. Je soupçonne que la 404 indication est généré en il (votre page AJAX n'est pas un WP post, ou quelque chose comme ça), et est plus tard transformé en un véritable 404 en-tête de réponse en $wp->handle_404(), la fonction appelée après l' query_posts() en main().

Je ne suis pas sûr à 100% que parse_query() est défini coupable, mais je vous propose de voir si vous pouvez simplement inclure wp-load.php au lieu de cela, car je crois qu'il fait tout le travail de création des objets que vous souhaitez accéder.

Encore une fois, je n'ai pas vraiment l'utilisation de WordPress, donc je ne peux pas être sûr, mais en regardant le code source de ce qui semble être la plus probable en cas, de ce que je peux dire.

3voto

alex Points 186293

J'ai ajouté un fichier ajax.php dans un modèle WordPress une fois et j'ai eu ce problème.

Je l'ai résolu simplement en ajoutant au sommet de ajax.php

 header('Response: HTTP/1.1 200 OK');
 

Une sorte de bidouille, mais ça a fonctionné.

3voto

Zachary Schuessler Points 2141

Personne d'autre a posté ce, à titre de réponse, de sorte qu'il vaut la peine de remarquer. Vous devez être notamment wp-load.php au lieu de wp-blog-header.php.

Si vous ouvrez wp-blog-header.php , vous allez voir pourquoi:

if ( !isset($wp_did_header) ) {

    $wp_did_header = true;

    require_once( dirname(__FILE__) . '/wp-load.php' );

    wp();

    require_once( ABSPATH . WPINC . '/template-loader.php' );

}

Si vous êtes seulement de la sortie json pour une opération AJAX, vous n'avez pas besoin d'inclure template-loader.php. Cela va créer une surcharge inutile, et puis, bien sûr, de fournir de l'erreur 404.

Cette "solution de contournement" est nécessaire pour les actuels et futurs versions de WordPress. Je suis en supposant que rien passé 3.0 devrait inclure wp-load.php comme indiqué.

1voto

Annika Backstrom Points 8138

Globalement, il n’existe pas une tonne d’endroits où WordPress retournera un 404. Je recommande d’ajouter l’arbre source à ces emplacements et de placer du code de débogage pour tracer la raison de son déroulement.

0voto

Jage Points 4889

Sur la base de la réponse de Tim, j'ai changé le hook que je récupérais de "wp" à "init" dans mon plugin et il ne donnait plus le 404.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X