2017-02-09 42 views
0

我有一個包含所有常見元素(html/php,css,js)的頁面,並且通過ajax調用(使用表單)頁面。所有的工作都很好,我對此感到滿意......除了它沒有完成!ajax後觸發js

Ajax調用是:

$(".view_button").click(function(event) { 
    $("#reportframe").html("Loading..."); 
    var geturl = $("#holder").attr("action"); 
    $.ajax({ 
     url: geturl, 
     type: 'get', 
     dataType: 'html', 
     async: false, 
     data: $('#holder').serialize() 
    }) 
    .done(function(html) { 
     $("#reportframe").html(html); 
     alert("Loaded!"); 
    }); 
}); 

.view_button是表單的提交按鈕,0​​的形式ID和#reportframe是DIV被加載到該頁面。設置geturl的原因是因爲取決於表單中選擇的選項,它將更改表單的'action'屬性以獲取不同的頁面。

有兩件事情,我似乎無法解析:

  1. 第一次頁面通過AJAX的「警報」加載不顯示,最jQuery的元素不起作用。但是,第二次(以及後續)頁面通過ajax加載完成時會彈出'alert',並且有些jquery元素可以工作!

  2. 獲取所有jquery在加載頁面中工作!特別是有一個我們加載的工具稱爲'tooltipster' - 這顯然不會被加入,因爲控制檯說'tooltipster不是函數',即使js文件被調用並加載。

所有js/jquery代碼和文件都在加載頁面的末尾調用。

還有一件事 - 我似乎無法抓住data來顯示它,即使它顯然在ajax中傳輸。有任何想法嗎?

任何見解非常感謝!

+0

我想補充,被叫頁面完美的作品時,如裝一個單獨的頁面本身,所以我知道其中的一切實際工作。 –

+1

'.view_button是表單的提交按鈕'這可能是你的問題。嘗試連接到'form'的'submit'事件,並調用'preventDefault()'來停止標準的表單提交。 –

+0

@RoryMcCrossan我會盡力...我會嘗試任何事情!你認爲這會改變什麼嗎?因爲它提交併且按鈕是'submit'輸入類型。謝謝。 –

回答

0

如果.view_button元素是提交按鈕,則將提交form。這意味着JS代碼將停止執​​行,頁面將被傳輸。這反過來意味着你的AJAX調用將不會被執行,或者在它完成之前被中止。

爲了解決這個問題,勾你的代碼的submit事件的形式和呼叫preventDefault()所提供的情況下,停止該標準提出,像這樣:

$("#holder").submit(function(e) { 
    e.preventDefault(); 

    $("#reportframe").html('Loading...'); 

    $.ajax({ 
     url: $(this).prop('action'), 
     type: 'GET', 
     dataType: 'html', 
     data: $(this).serialize() 
    }).done(function(html) { 
     $('#reportframe').html(html); 
    }); 
}); 

注意我刪除async: false因爲它被認爲是非常糟糕練習,直到瀏覽器警告你不要在控制檯中使用它。

而且,你用這個AJAX請求到元件以加載遠程HTML,你可以更換$.ajax呼叫與load()代替:

$("#holder").submit(function(e) { 
    e.preventDefault();  
    $("#reportframe").html('Loading...').load($(this).prop('action'), $(this).serialize()); 
}); 
+0

感謝你。我所遇到的問題是,一旦將某些內容放入其功能中,提交就根本不起作用。所以如果我只有'$(「#持有者」)。submit();那麼表單一旦被加載就會提交,但如果它有其他內容,那麼它就什麼也不做!我一直在嘗試我能想到的一切,但無濟於事。 ( –

+0

)我不太確定你的意思。$(「#holder」)。submit()'提交提交事件,就好像你真的點擊了一個按鈕來發送表單。使用'$(「#holder」 ).submit(fn)'是一個提交事件處理程序,它在提交表單時運行函數中的代碼。 –

+0

1.如果我只有'$(「#holder」)。submit()',那麼當頁面加載時這會在頁面加載完成後自動觸發 2.如果我有'$(「#holder」)。submit(fn)',那麼即使我按下提交按鈕也沒有任何反應 1.不應該發生, 2.應該發生! –