javascript - Jquery、Ajax 未触发正确的 php 函数

标签 javascript php jquery html ajax

您好,我有一个小项目,其中有 2 个选项卡,即“新闻”和“编辑新闻”。当您打开页面时,新闻选项卡将默认显示一些新闻。当用户切换到“编辑新闻”选项卡时,他可以从选择框中选择是否想要过去 4 周或 6 周的新闻。在选择和提交按钮上单击,他可以再次切换到带有编辑后的新闻的“新闻”选项卡。到目前为止,我可以正确管理我的选项卡。我在这里面临的唯一问题是,当用户从选择框选择新闻并提交按钮时,我无法触发保存新闻小部件功能,该功能将调用我的数据库查询部分来更新我的新闻。所以在提交按钮之后我也是触发 get-news-widget 函数,默认情况下我得到的是新闻而不是编辑后的新闻。谢谢。 这是我的代码:

仪表板.php

if($param['aktion'] == 'save-widget-news')
{
    //$param['news'] 
    //UPDATE SQL...
        $page['register-news'] = array(
        1   => array( 'News','aktiv',$page['script'],'',''),
        0   => array( 'Edit News','enabled',$page['script'],''),    
    );
    //echo $selectValue=$_POST['news'];
    if(isset($_POST['Save']))
    {
        if(($selectValue)==4){

    echo  $sql=" SELECT DISTINCT ad_news_texte.headline, ad_news.datum_archiv
FROM ad_news_texte
INNER JOIN ad_news_oe ON ad_news_texte.news_id = ad_news_oe.id_ad_news
INNER JOIN ad_news ON ad_news_oe.id_ad_news = ad_news.id
WHERE ad_news.datum_archiv
BETWEEN curdate( ) - INTERVAL DAYOFWEEK( curdate( ) ) +28
DAY AND curdate( )
";

$sql_select=mysql_query($sql);

}
 elseif(($selectValue)==6){

      $sql=" SELECT DISTINCT ad_news_texte.headline, ad_news.datum_archiv
FROM ad_news_texte
INNER JOIN ad_news_oe ON ad_news_texte.news_id = ad_news_oe.id_ad_news
INNER JOIN ad_news ON ad_news_oe.id_ad_news = ad_news.id
WHERE ad_news.datum_archiv
BETWEEN curdate( ) - INTERVAL DAYOFWEEK( curdate( ) ) +42
DAY AND curdate( )
";

$sql_select=mysql_query($sql);

}

$html = '<table width="538" cellspacing="0" cellpadding="0" border="0">
        <tr>
            <td>
                <div>'.CreateRegister($page['register-news']).'</div>
                '.CreateMessage().'
                <div class="cont-liste-verlauf register"> ';
                while($row = mysql_fetch_array($sql_select)){       
                $news_result = $row['headline'] . " " .$row['datum_archiv'] ; 

                $html .= '<table id="news"> 
                        <div class="welcome-rahmen krz toggleNews">  

                       <p class="welcome-subheadline"><input type="hidden" name="type" value="'. $news_result .'" ></p> ';
                      }

                $html .= '</div></table>            
            </div>
        </td>
    </tr>
</table>';


                    $return = array(
            'status' => 1,
            'html'  => $html
        );

    echo json_encode($return);
    die();
    }
    else{
    $param['aktion'] = 'get-widget-news';
}
}



if($param['aktion'] == 'get-widget-news')
{
    $newsId = 1;
    $page['register-news'] = array(
        1   => array( 'News','aktiv',$page['script'],''),
        0   => array( 'Edit-News','enabled',$page['script'],'',''), 
    );
        $param['aktion'] = 'save-widget-news';
        $html = '<table width="538" cellspacing="0" cellpadding="0" border="0" >
            <tr>
                <td>
                <div>'.CreateRegister($page['register-news']).'</div>
                '.CreateMessage().'
                <div class="cont-liste-verlauf register">               
                <table id="news">
<div class="welcome-rahmen lng toggleNews" id="news_269_kurz">
<a href="news.php?id=269" class="TrackNews" id="01" target="_blank">
<p class="welcome-breadcrump">Montag, 19.05.2014</p>
<p class="welcome-subheadline">Teilnahme von MAN Top Used an der Samoter 2014</p>
</a>
</div>

<div class="welcome-rahmen lng toggleNews" id="news_264_kurz">
<a href="news.php?id=264" class="TrackNews" id="02" target="_blank">
<p class="welcome-breadcrump">Freitag, 24.01.2014</p>
<p class="welcome-subheadline">Kaufvertrag: neue Porsche-Vorlage zum Drucken!</p>
</a>
</div>


</table>
</div>
</td>
</tr>
</table>';

    $return = array(
            'status' => 1,
            'html'  => $html
        );

    echo json_encode($return);
    die();
}

if($param['aktion'] == 'get-widget-news-edit')
{


    $page['register-news'] = array(
        0   => array( 'News','enabled',$page['script'],'',''),
        1   => array( 'Edit News','aktiv',$page['script'],''),  
    );

    $html = '<table width="538" cellspacing="0" cellpadding="0" border="0">
            <tr>
                <td>
                <div>'.CreateRegister($page['register-news']).'</div>
                '.CreateMessage().'
                <div class="cont-liste-verlauf register">

                            <form name="UserInformationForm" method="POST" >
                            <table id="news">

                        <select name="news" id="news">
                                <option value="4">Show news from last 4 weeks</option>
                    <option value="6">Show news from last 6 weeks</option>                              
                        </select>
                        <br/><br/>

                            </table>
                            '.CreateButton($page['button']).'
                            </form> 

                    </div>
            </td>
        </tr>
    </table>';

    $return = array(
            'status' => 1,
            'html'  => $html
        );

    echo json_encode($return);
    die();
}

仪表板.js

$(document).ready(function(){

    function saveNewsWidget()
    {
        var selectBoxValue = $('select[name="news"]').val();
        $.ajax({
        type: "POST",
        url: "ajax/dashboard.php",
        dataType : 'json',
        cache: false,
        data: {'aktion' : 'save-widget-news', 'news' : selectBoxValue},
        success: function(data)
        {
            //getNewsWidget();
            $('#news').html(data['html']);

        }
      });
  }

    function getNewsWidget()
    {
        $.ajax({
        type: "POST",
        url: "ajax/dashboard.php",
        dataType : 'json',
        cache: false,
        data: {'aktion' : 'get-widget-news'},
        success: function(data){
            //alert(data);
            $('#news').html(data['html']);
        },
        error: function(data){
            alert('error');
            //$('#news').html(data.html);
        }
      });
  }

  function getNewsWidgetEdit()
    {
        $.ajax({
        type: "POST",
        url: "ajax/dashboard.php",
        dataType : 'json',
        cache: false,
        data: {'aktion' : 'get-widget-news-edit'},
        success: function(data){
            $('#news').html(data.html);

        }
      });
  }

    $('#news .butt-rahmen').live('click', function(){

            if($(this).attr('id') == 'saveId')
            {
                saveNewsWidget();

            } 
                return true;


    });

    getFahrzeugeWidget();
    getNewsWidget();

});

最佳答案

在我看来,您正在提交页面并运行 ajax 调用。您需要像这样停止页面提交...

$('#news .butt-rahmen').live('click', function(e) {

    e.preventDefault(); // this will stop the form being submitted and reloading the page

    if($(this).attr('id') == 'saveId') {
        saveNewsWidget();
    } 
});

请注意 e 也作为函数参数传递。

另外,我假设您使用的是旧版本的 jQuery,因为 live() 已被弃用并被 on() 取代。如果您使用的是较新的版本,那么您也需要进行更改。对于您所拥有的内容,只需将 live 更改为 on 即可。

关于javascript - Jquery、Ajax 未触发正确的 php 函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24301672/

相关文章:

php - cakephp 2.5 响应时间慢

javascript - 如何使用 jquery 选择包含精确文本值的范围?

javascript - 如何在数据网格中显示由具有属性和值的对象组成的数组?

JavaScript 'Calculate' 函数 - if/else

javascript - 在jquery中显示一个相对于它的id的div

php - 为特定字符之前和之后的文本字符串着色

javascript - 在全局变量内使用 .click() 范围其 JavaScript 计时问题

javascript - 使用 JAVASCRIPT 将单个值复制到多个列中

php - 获取 mysql 数据库中重复条目的值并对其进行计数

php - yaml/symfony2 : Override configurations