2014-01-10 110 views
0

我有了的foreach在他們像這樣一個div:刷新DIV與Ajax調用jQuery的

<div id="conversation"> 
    <?php foreach($singles as $question): ?> 
    <div class="well well-sm"> 
     <h4><?php echo $question['question_title']; ?></h4> 
    </div> 
    <div class="bubble bubble--alt"> 
     <?php echo $question['question_text']; ?> 
    </div> 
    <?php endforeach; ?> 
    <?php foreach($information as $answer): ?> 
    <div class="bubble"> 
     <?php echo $answer['answer_text']; ?> 
    </div> 
    <?php endforeach; ?> 
</div> 

而且我也有一個表格放在一個新的答案:

<form method="post" style="padding-bottom:15px;" id="answerForm"> 
    <input type="hidden" id="user_id" value="<?php echo $_SESSION['user_id']; ?>" name="user_id" /> 
    <input type="hidden" id="question_id" value="<?php echo $_GET['id']; ?>" name="question_id" /> 
    <div class="row"> 
     <div class="col-lg-10"> 
     <textarea class="form-control" name="answer" id="answer" placeholder="<?php if($_SESSION['loggedIn'] != 'true'): ?>You must be logged in to answer a question <?php else: ?>Place your answer here <?php endif; ?>" placeholder="Place your answer here" <?php if($_SESSION['loggedIn'] != 'true'): ?>disabled <?php endif; ?>></textarea> 
     </div> 
     <div class="col-lg-2"> 
     <?php if($_SESSION['loggedIn'] != 'true'): ?> 

     <?php else: ?> 
      <input type="submit" value="Send" id="newAnswer" class="btn btn-primary btn-block" style="height:58px;" /> 
     <?php endif; ?> 
     </div> 
    </div> 
    </form> 

我我通過ajax提交表單,並希望div #conversation每次刷新並重新加載用戶提交問題的答案。現在,我有以下的Ajax代碼:

<script type="text/javascript"> 
    $("#newAnswer").click(function() { 
    var answer = $("#answer").val(); 
    if(answer == ''){ 
     $.growl({ title: "Success!", message: "You must enter an answer before sending!" }); 
     return false; 
    } 
    var user_id = $("input#user_id").val(); 
    var question_id = $("input#question_id").val(); 
    var dataString = 'answer='+ answer + '&user_id=' + user_id + '&question_id=' + question_id; 
    $.ajax({ 
     type: "POST", 
     url: "config/accountActions.php?action=newanswer", 
     data: dataString, 
     success: function() { 
     $.growl({ title: "Success!", message: "Your answer was submitted successfully!" }); 
     $("#answerForm").find("input[type=text], textarea").val(""); 
     $("#conversation").hide().html(data).fadeIn('fast'); 
     } 
    }); 
    return false; 
    }); 

</script> 

你會發現,我已經試過$("#conversation").hide().html(data).fadeIn('fast');但沒有成功完成這項工作。它只是將通過ajax傳遞的信息重新加載到div中,而不是僅僅重新加載foreach。

如何在ajax調用的成功函數中刷新div或<?php foreach(); ?>

+1

你不能,PHP是服務器端語言。你必須刷新頁面或調用一個將返回相關數據的PHP腳本 –

+0

我可以將提交的信息「附加」到同一個「#對話」div中嗎?爲了使它看起來像刷新? –

+0

我不確定要理解你的意思,但是當你添加一個新的anwser時,爲什麼不從腳本中返回所有$ question數據。但我真的不確定要了解你在這裏尋找什麼 –

回答

2

米奇,我期待在這一部分:

success: function() { 
    $.growl({ title: "Success!", message: "Your answer was submitted successfully!" }); 
    $("#answerForm").find("input[type=text], textarea").val(""); 
    $("#conversation").hide().html(data).fadeIn('fast'); 
    } 

參見表述 「html的(數據)」 ??? 「數據」在哪裏申報?上面的代碼將永遠不會工作。現在,看下面的幾行。特別是第一個。看到我的變化?

success: function(data) { 
    $.growl({ title: "Success!", message: "Your answer was submitted successfully!" }); 
    $("#answerForm").find("input[type=text], textarea").val(""); 
    $("#conversation").hide().html(data).fadeIn('fast'); 
    } 

一旦你做出這種改變,你需要使用一個調試器(Chrome的或其他方式)以檢查什麼從Ajax調用回來(我們沒有在這裏)是你所需要的。但首先,修復這個錯誤。

祝你好運。

1

jQuery .load()方法(http://api.jquery.com/load/)可以從網頁中獲取並更新單個塊。它會重新在後臺整個網頁,從而產生一定的開銷..

更改阿賈克斯成功的東西象下面這樣:

success: function() { 
    $.growl({ title: "Success!", message: "Your answer was submitted successfully!" }); 

    $("#conversation").load("config/accountActions.php #conversation >*"); 
} 

這應該載入您的通話塊,並將其所有的孩子的,並取代現有的(舊)對話塊。