-2

スタック オーバーフローを 1 時間以上検索してきましたが、この問題の解決策が見つからないようです。この PHP ページの読み込み時間を短縮するために、他のページのコンテンツを div に配置しようとしています。

ページは正しくクエリを実行し、Safari (Inspector) と FireBug で出力を確認できます。

内のコンテンツsuccess: function(output_string)は読み込まれません。考えられるあらゆる組み合わせを試しました。これvar self = this;jQuery(document).ready(function() {おそらく 2 つのバージョンの jQuery を使用しています。

添付のコードは次のとおりです。

<script type="text/javascript">

jQuery(document).ready(function() {
  jQuery(".text").hide();
  //toggle the component with class msg_body
  jQuery(".ttop2").click(function() {
    jQuery(this).next(".text").slideToggle(500);

    var expanded = "./expand.png";
    var collapsed = "./collapse.png";
    var src = $(this).find(".toggle").attr('src');

<? if($show == 'off') { ?>

    if (src == expanded){
      $(this).find(".toggle").attr('src',collapsed);
      var office = $(this).attr("id");
      var month = "<? echo $month; ?>";
      var year = "<? echo $year; ?>";
      $(this).closest(".loading").html("Loading...");
      alert(office);

      $.ajax({
        url: 'LTData.php',
        type:'POST',
        data: 'office=' + office + '&month=' + month + '&year=' + year,
        dataType: 'json',
        success: function(output_string){
            $(this).find(".loading").html("");
            $(this).find(".text").html(output_string);
        } // End of success function of ajax form
      }); // End of ajax call 

    } else {
      $(this).find(".toggle").attr('src',expanded);
      var office = $(this).attr("id");
      alert(office);
    }

  });
});

<? } else {
//..... Etc.
 ?>

PS: 私は今日 Javascript プログラミングを始めたので、いくつかの重要な回答が欲しいです。ありがとう!

編集:スクリプトは頭の中にあります。

編集 2: HTML/PHP を添付。

    $sqlb="SELECT * FROM league ORDER by total DESC"; 
    $resultb=mysql_query($sqlb);
    $num=mysql_num_rows($resultb);
    while($rowsb=mysql_fetch_array($resultb)){

    if($rowsb[total] == '0') {
        continue;
    }


if($col=='ebdff2'){

$col='efefef';

}else{

$col='ebdff2';

}
?>

<table class="ttop2" id="<? echo $rowsb["office"]; ?>" bgcolor="#<? echo $col;?>" width="100%">
    <tr>
        <td width="50%" align="left"><b style="text-transform: capitalize; color:rgb(98, 188, 70);"><? echo $rowsb[office];?></b></td>
        <td width="20%" align="left"><b style="text-transform: capitalize; color:rgb(98, 188, 70);"><? echo $rowsb[leads];?></b></td>
        <!-- <td width="200px" align="left">Total leads</td>
        <td width="270px" align="left">Leads converted</td>-->
        <td width="20%" align="left"><b style="text-transform: capitalize; color:rgb(98, 188, 70);"><? echo $rowsb[total];?></b></td>
        <td width="10%" align="left"><img style="float: right;" class="toggle" alt="" src="./expand.png" /></td>
    </tr>
</table>

<div class="text"><div class="loading"></div></div>

<? } ?>

<?
}///end of show what...
?>
4

3 に答える 3

3

ajax の成功関数では、this参照が失われます。関数の前にキャッシュする必要があります:

var $this = $(this); //Here
$.ajax({
    url: 'LTData.php',
    type:'POST',
    data: 'office=' + office + '&month=' + month + '&year=' + year,
    dataType: 'json',
    success: function(output_string){
        $this.find(".loading").html("");
        $this.find(".text").html(output_string);
    } // End of success function of ajax form
}); // End of ajax call 

または、Kevin B が言ったように、コンテキスト オプションで渡します。

$.ajax({
    url: 'LTData.php',
    type:'POST',
    data: 'office=' + office + '&month=' + month + '&year=' + year,
    dataType: 'json',
    context : this,
    success: function(output_string){
        $(this).find(".loading").html("");
        $(this).find(".text").html(output_string);
    } // End of success function of ajax form
}); // End of ajax call 
于 2013-08-30T14:54:28.713 に答える