2014-09-25 77 views
0

我有代碼,當頁面加載時,調用mysql和填充數據的select元素。這可以在初始加載或刷新頁面時正常工作,但我試圖做的是,當我從ajax獲得成功回調時,將使用新數據更新或重新填充select元素。jQuery加載不填充選擇元素

我可以看到數據正從瓢蟲中的ajax返回,但由於某種原因,未填充select元素。如果有人能發現我已經搞砸了,我將不勝感激。非常感謝。

PHP/HTML代碼

<div class="fieldset"> 
      <h1><span>Select Your Box(es)</span></h1> 
      <p> 
       <select data-placeholder="Choose your box(es)..." class="chosen-select" name="box_frtv[]" id="box_frtv" multiple required="required"> 
       <option value=""></option> 
       <?php 
        do { 

        ?> 
       <option value="<?php echo $row_rs_fbrtv['boxref']; ?>"><?php echo $row_rs_fbrtv['boxref']; ?></option> 
       <?php 
        } while ($row_rs_fbrtv = mysql_fetch_assoc($rs_fbrtv)); 

        $rows = mysql_num_rows($rs_fbrtv); 

        if($rows > 0) { 

        mysql_data_seek($rs_fbrtv, 0); 

        $row_rs_fbrtv = mysql_fetch_assoc($rs_fbrtv); 

        } 

        ?> 
       </select><span></span><div id="boxError"></div> 
      </p> 
      </div> 

jQuery代碼

submitHandler: function() 
{ 
    if ($("#USRfilertv").valid() === true) 
    { 
    var data = $("#USRfilertv").serialize(); 

    $.ajax(
    { 
     type: "POST", 
     url: "frtv.php", 
     data: data, 
     dataType: "json", 

     success: function (data) 
     { 
     if (data.opp == 'error') 
     { 
      var messageOutput = ''; 
      for (var i = 0; i < data.length; i++) 
      { 

      messageOutput += data[i].file + ' '; 

      } 

      notif({ 
      msg: "There was an error retrieving the following file: " + '<br /><br />' + '<b><font color=\"black\">' + data.file + '</font></b><br /><br />' + ' Please correct this error and try again.<br />If this error persists, please contact us quoting ref: ' + '<b><font color=\"#fbf66a\">' + '#FRTV0001.<br />' + '</font>' + '<br />' + 'Thank you.', 
      type: "frtvError", 
      position: "center", 
      width: 490, 
      height: 75, 
      multiline: true, 
      timeout: 6000, 
      opacity: 0.8, 
      fade: 10, 
     }); 
     } 
     else 
     { 
      var messageOutputs = ''; 
      for (var i = 0; i < data.length; i++) 
      { 

      messageOutputs += data[i].file + ' '; 

      } 

      $("#USRfilertv").get(0).reset(); 
      $("#box_frtv").load("refreshFrtv.php"); 
      $("#frtv_address").trigger("chosen:updated"); 

      notif({ 
      msg: "You have successfully retrieved the following file(s)." + '<br /><br />' + '<b><font color=\"black\">' + data.file + '</font></b><br /><br />' + ' These file(s) were successfully entered into the database.<br />Thank you.', 
      type: "FileRtvSuccess", 
      position: "center", 
      width: 440, 
      height: 75, 
      multiline: true, 
      timeout: 6000, 
      opacity: 0.8, 
      fade: 10, 
     }); 
     $("#box_frtv_chosen").find('option:selected').remove(); 
     $("#box_frtv").html(''); 
     $("#box_frtv").trigger("chosen:updated"); 
     $("#box_ffrtv_chosen").find('option:selected').remove(); 
     $("#box_ffrtv").html(''); 
     $("#box_ffrtv").trigger("chosen:updated"); 
     } 

     } 

    }); 
    } 
} 
+0

也許您的網頁緩存。我有一個類似的問題,我解決了在我的ajax調用中添加一個帶有當前日期時間的新變量。我不知道它是否能解決你的問題。 – 2014-09-25 09:14:53

+0

使用.class代替#id作爲選擇器...典型錯誤 – pirs 2014-09-25 09:16:21

+0

@Andrea能否擴展您的答案請。謝謝 – user1532468 2014-09-25 09:25:40

回答

1

要重新填充選項中的選項,您可以(清空)從數據庫中選擇和(附加)您創建的新選項中的選項。

演示

http://jsfiddle.net/48v5ufca/

jQuery的

$("#clickme").on("click", function(e) { 
var messageOutputs = ''; 
      for (var i = 0; i < 10; i++) 
      { 

      messageOutputs += '<option value="">New'+i+'</option>'; 


      } 

$("#box_frtv").empty(); 
$("#box_frtv").append(messageOutputs); 
}); 
+0

這個想法是,一旦用戶成功提交,select會刷新,在這種情況下:refreshFrtv.php從mysql獲取新數據。我不希望選擇一個項目只是重新填充選擇。謝謝 – user1532468 2014-09-25 09:46:42

+0

你有沒有檢查過演示。這就是append的作用。只要取出條件(如果(我!= 3){...)並重新填充選擇只要你喜歡。生病修改答案 – Tasos 2014-09-25 09:51:10

+0

這就是選擇的插件。 $( 「#box_frtv」)觸發( 「選擇:更新」);所以本質上,應該工作。謝謝 – user1532468 2014-09-25 09:58:18

-1

我使用$.get有類似的問題。

我試圖加載模板從以前的成功Ajax回調添加data,我以這種方式解決:

var t; 
$.get('/js/template/page_01.mst', 
    { t: new Date().getTime() }, // I added this var in here 
    function(template) { 
     // etc... 
    }); 

但正如我所說,我不知道它是否能夠解決您的問題。

在我的情況下,我試圖得到的頁面被緩存。