2009-06-23 5 views
0

私は最初からやります。 私はショートコードでポストに挿入するか、サイドバーウィジェットとして追加できるという点で、二重の義務を負うwordpressプラグインを構築しています。それはローカルのPHPファイルへのjquery.postリクエストを作るためにいくつかのjsを出力します。ローカルのphpファイルは、Webサービスに対していくつかのデータを要求します。 (私は直接jquery.ajaxでWebサービスに照会するのではなく、このようにしなければなりませんでした。なぜなら、URLにはjsに置かれた場合にpublicとなるライセンスキーが含まれているからです)。phpスクリプトは2つのajaxリクエストを取得し、1つしか返しませんか?

とにかく、サイドバーウィジェットとショートコードによるプラグイン出力の両方を持つワードプレスブログのページを表示しているときに、リクエストの1つのみが動作します。私はそれがPHPスクリプトからの応答を返すことで動作することを意味します。ページがロードされると、手動で指示されたときに両方とも正常に動作します。

ウェブページビュー - > 2つの投稿要求をPHPスクリプトに送信 - >両方の要素を提出する必要がありますが、1つのみです。

私のPHPスクリプトは単なるです:かなり基本的な

<?php 
    if(isset($_POST["zip"])) { 
     // build a curl object, execute the request, 
     // and basically just echo what the curl request returns. 
    } 
?> 

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

       }); 
      }); 
     }); 
} 

今先頭に付加されていない「widget_」で先頭に追加されたすべてのものを除いて、これと同じ別の関数があると想像:

は、ここでいくつかは、一部の人は見てみたかったJSです。私は両方の要求が行われている私のApacheのログに見ることができます

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

    }); 
}) 

:これらの2つの機能は、経由して個別に呼び出されます。 私はそれが何らかの競合状態であると推測していますが、それは意味をなさないものです。 私はこれ、すべてのアイデアに新しいですか?

EDIT:私は最適以下のソリューションを考え出しました。プラグインがページでも使用されている場合、私のウィジェットが検出するようにします。そうであれば、リクエストを実行する前に3秒待っています。しかし、私は問題がPHPスクリプトにあると信じているので、複数のクライアントが同時に私のPHPスクリプトへのリクエストの1つをトリガーするページリクエストを実行した場合、同じことが起こると感じています。

+0

詳細情報やコードなしでは難しいです。 FirebugのNetパネルをFirefoxで使用して、ブラウザが送受信するトラフィック(要求/応答ヘッダーを含む)を確認できます.Ajaxのデバッグには非常に便利です。 – MSpreij

+0

私はfirebugを使用しましたが、私のPHPスクリプトは200 OKを返していますが、その1つに内容の長さがありません...私はそれがどういう意味か分かりません。そして、驚くべきことに、彼らは両方とも有効な応答を返すので、jquery.postが何とか途切れているように見えます。 –

答えて

1

私は本当に何を把握するためではない、本当に十分な情報が...

しかししようとする一つのことは、放火犯を取得し、応答が要求ごとに何であるかを確認することです。

もう1つ質問があります...あなたはIDで記入していますか?もしそうなら、あなたは同じIDを1ページに2回持っていることが原因である可能性があります。あなたがそれをオンラインに持っていれば、あなたを助けることがはるかに簡単になります。


編集:

いくつかのコメント...私は何も...しかし...

<!--jQuery("#widget_active_list").append("<div id='ActivityEntry'>" + html + " </div>");--> 

は、私の知る限りでは、このことによって解決されるかどうかわからないんだけどあなたがそこで使っているコメントのタイプは、htmlで使われているときだけ有効で、あなたのJavascriptを台無しにしているかもしれません。 //

の代わりに
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); 
            }) 
          ); 

2番目のすべて...そのブロック全体が最後にネストされています。それは効果がないように見えますが、それを乱すことは不可能ではありません。

最後に、実際には違いはないかもしれませんが、おそらくxmlへの応答のタイプを設定する必要があります。 PHPのhttpヘッダーと関数の最後の引数の両方を使用します。すなわち

header("Content-Type: application/xml"); 

jQuery.post("http://localhost/wordpress/wp-content/ActiveAjax.php", { zip: zip}, thefunctionhere, xml); 

これは、サブ最適なソリューションのための私の提案を助ける代わりにget要求を使用することであり、取られていないランダムなパラメータを追加していない場合両方のリクエストを考慮してください。リクエストごとに同じようにしますが、ページに移動するたびに異なります。こうすると、ブラウザは最初のリクエストをキャッシュし、もう一度サーバーにクエリを実行しませんが、ページに再度アクセスしたときにキャッシュしません。

+0

ウィジェットとプラグインを区別するために別のIDを使用しています。 さらに、ページのリロードを行うと、1つしか動作しないと言われましたが、それぞれの「更新」ボタンがあるため、更新しないものを強制すると正しく更新されます... –

+0

私は、まだあなたの投稿にコメントするには十分な評判を持っていますが、ネットタブでは、各リクエストの下に、3つのタブが必要です - パラメータ、ヘッダー、レスポンス - レスポンスタブには何が表示されますか? – Thomas

+0

私はコメントしたとおり、彼らは両方とも正しい期待応答を返しています。次にjqueryを使用して、ページを更新します。奇妙なのは、内容の長さがないものは、ページを更新するものです... –

関連する問題