加载页面

时间:2015-05-10 07:36:35

标签: php jquery ajax

我们正在创建一个管理控制台,客户端将自行更新他的网站。

为此,我们使用js和PHP(ajax)创建div:

    $(document).ready(function($)
    {
    function loadContent(page)
        {

            $.ajax(
            {
                url: 'contenu/contenu.php',
                type: 'POST',
                dataType: 'html',
                data:
                {
                    'onglet': page
                },
                success:function(contenu)
                {
                    console.log("success");
                    $("div."+page).html(contenu);   
                }
            })
        };
});

PHP代码(只是其中的一部分):

$reponse = $db->query('SELECT * FROM philosophie');
$data = $reponse->fetch();
//maj de la version FR de philosophie
echo '<form action="#" method="POST">
<label>Texte en français :</label><br/>
<textarea  name="texte_fr">'.$data["texte_fr"].'</textarea><br/>
<br />
<input type="button" id="maj_philosophie_fr" value="Mettre à jour ce texte" />
<br /><br />';

该表单出现在网站上,效果很好。

之后,我想知道有多少个按钮,其id以&#34开头; maj _&#34;使用此代码在网站内:

alert($("[id^='maj_']").length);

我仍然有0回复。

该元素尚未就绪,我无法在我的div上获得更改事件。

我看到了firebug中的元素(DOM部分),它们是红色字符。

请问您有什么想法吗?

1 个答案:

答案 0 :(得分:1)

在调用成功函数之前,您的警报似乎正在运行。尝试在那里移动警报,更好的是,使用setTimeout将其抛入下一个事件周期。

$(document).ready(function () {
  function loadContent (page) {
    $.ajax({
      url: 'contenu/contenu.php',
      type: 'POST',
      dataType: 'html',
      data: { 'onglet': page },
      success: function (contenu) {
        console.log("success")
        $("div."+page).html(contenu)

        setTimeout(function () {
          alert($("[id^='maj_']").length)
        }, 100)
        // might even work with 0, if the dom render function 
        // is the very next thing in the queue
      }
    })
  }
})

如果你必须使用许多嵌套的ajax调用,你可能想要研究使用promise api。 Here are the docs for the jQuery implementation of $.promise()

确保在调用成功函数后运行代码不是可以解决的问题。代码在接收数据之前无法了解数据,这意味着要么嵌套成功回调,要么使用其他解决方案,例如链接命名函数回调,或者最好是promises。