Je vais commencer depuis le début. Je construis un plugin wordpress qui fait double emploi, en ce sens qu'il peut être inséré dans un post via un shortcode, ou ajouté comme un widget sidebar. Tout ce qu'il fait est la sortie de certains js pour faire des demandes jquery.post à un fichier php local. Le fichier php local fait une demande à un service web pour certaines données. (Je devais le faire de cette façon au lieu d'interroger directement le service web avec jquery.ajax car l'url contient une clé de licence qui serait publique si elle était placée dans le js).script php reçoit deux requêtes ajax, n'en renvoie qu'une seule?
Quoi qu'il en soit, lorsque je visualise une page dans le blog wordpress qui a à la fois le widget sidebar et la sortie du plugin via shortcode seulement une des demandes fonctionne. Je veux dire que cela fonctionne en ce sens qu'il reçoit une réponse du script php. Une fois la page chargée, ils fonctionnent tous les deux normalement quand on leur dit manuellement.
Affichage de la page Web -> envoyer 2 demandes de publication à mon script php -> les deux éléments doivent être remplis, mais un seul doit l'être.
Mon script php est juste:
<?php
if(isset($_POST["zip"])) {
// build a curl object, execute the request,
// and basically just echo what the curl request returns.
}
?>
assez basique.
voici quelques js certaines personnes voulaient voir:
function widget_getActivities(zip){
jQuery("#widget_active_list").text("");
jQuery.post("http://localhost/wordpress/wp-content/ActiveAjax.php", { zip: zip},
function(text) {
jQuery(text).find("asset").each(function(j, aval){
var html = "";
html += "<a href='" + jQuery(aval).find("trackback").text() + "' target='new'> " + jQuery(aval).find("assetName").text() + "</a><b> at </b>";
jQuery("location", aval).each(function(i, val){
html += jQuery("locationName", val).text() + " <b> on </b>";
});
jQuery("date", aval).each(function(){
html += jQuery("startDate", aval).text();
<!--jQuery("#widget_active_list").append("<div id='ActivityEntry'>" + html + " </div>");-->
jQuery("#widget_active_list")
.append(jQuery("<div>")
.addClass("widget_ActivityEntry")
.html(html)
.bind("mouseenter", function(){
jQuery(this).animate({ fontSize: "20px", lineHeight: "1.2em" }, 50);
})
.bind("mouseleave", function(){
jQuery(this).animate({ fontSize: "10px", lineHeight: "1.2em" }, 50);
})
);
});
});
});
}
imaginer Maintenant, il y a une autre fonction identique à celui-ci, sauf tout ce qui est précédé d' « Widget_ » est pas préfixé. Ces deux fonctions sont appelées séparément via:
jQuery(document).ready(function(){
w_zip = jQuery("#widget_zip").val();
widget_getActivities(w_zip);
jQuery("#widget_updateZipLink").click(function() { //start function when any update link is clicked
widget_c_zip = jQuery("#widget_zip").val();
if (undefined == widget_c_zip || widget_c_zip == "" || widget_c_zip.length != 5)
jQuery("#widget_zipError").text("Bad zip code");
else
widget_getActivities(widget_c_zip);
});
})
Je peux voir dans mes journaux apache que les deux demandes sont en cours. Je suppose que c'est une condition de course, mais ça n'a pas de sens. Je suis nouveau à tout cela, des idées?
EDIT: J'ai trouvé une solution sous-optimale. J'ai mon widget détecter si le plugin est également utilisé sur la page, et si c'est le cas, il attend pendant 3 secondes avant d'exécuter la requête. Mais j'ai le sentiment que la même chose se produira si plusieurs clients exécutent une requête de page en même temps qui déclenche l'une des requêtes à mon script PHP, parce que je crois que le problème est dans le script PHP, ce qui est effrayant.
Difficile à dire sans plus d'info ou de code. Vous pouvez utiliser le panneau Net de Firebug sous Firefox pour voir le trafic que le navigateur envoie et reçoit (y compris les en-têtes de requête/réponse), très pratique pour le débogage d'Ajax. – MSpreij
J'ai utilisé firebug, mon script php renvoie 200 OK, mais l'un d'entre eux n'a pas de contenu ... Je n'ai aucune idée de ce que cela signifie. Et étonnamment, ils retournent tous les deux une réponse valide, donc il semble que le jquery.post soit étranglé d'une manière ou d'une autre. –