2011-12-12 23 views
0

我正在構建我的第一個AJAX網站,我在其中實現了自定義MVC。有關自定義php Ajax的理論問題MVC

Basicly我與AJAX(通過jQuery)發送的部分大的PHP開關,響應它是通過AJAX注入到索引頁面的HTML/PHP頁面的一部分。

我的問題來的時候,例如,響應具有形式至極我想用AJAX。

如果我把我的腳本在我的JavaScript文件中檢索到這個表單,它不起作用......但是當我將腳本放在與HTML響應一樣的頁面中時,我認爲那不是一個正確的代碼的方式...我錯了嗎?

反正是有收集所有的JavaScript代碼中只有一個文件?

回答

0

你的JS文件中有PHP代碼嗎?如果是這樣,那就是問題,JS文件不會被PHP解析。

+0

沒了,這裏只有JS在我的js文件: – blop

+0

顯示你的代碼(編輯問題)! –

0

據我瞭解,你想一個事件處理程序分配給您的形式。例如,您可能想要分配處理表單提交事件的事件處理程序。

$("#myform").submit(function() { 
    $.post("sendFromDataHere.php", $(this).serialize()); 
}); 

現在,您有兩種情況。

  1. 你把這個腳本放在你的主js文件中。
  2. 你把這個腳本和返回的html放在一起。

2期工程,1沒有。這是因爲在場景1中,當腳本執行時,#myForm不存在於DOM中。 2的工作原理是因爲它是在#myForm插入到DOM中時加載的,因此可以分配事件處理程序。

那該怎麼辦? 2當然是不好的做法。要將處理程序分配給在將來某個時間插入到DOM中的元素,可以使用jQuery的函數.live().delegate。如果您使用最新版本的jQuery(> = v1.7),則應該查看最近添加的.on()。據我瞭解,它現在應該被用來代替.bind(),.live()和.delegate()。

這裏是腳本會是什麼樣子使用。做()。

$("body").on("submit", "#myForm", function() { 
    $.post("sendFromDataHere.php", $(this).serialize()); 
}); 

一個好的做法是用你要插入html的容器的選擇器替換「body」選擇器。

以下內容引自.on()文檔。

「委託事件具有的優點是它們可以處理來自被添加到文檔在稍後的時間後代元素事件。通過挑選這是保證存在於授權的事件處理程序被安裝時的元件,你可以使用委託的事件,以避免需要頻繁安裝和取下事件處理程序。這個元素可以是一個模型 - 視圖 - 控制器設計視圖的容器元素......」

使用這樣的將事件處理程序分配給您的表單,您應該能夠將腳本放入主js文件中。

+0

非常感謝您的非常完整的答案!我會嘗試 – blop

+0

實際上它工作正常:$(「#content」)。on(「submit」,「#amyform」,function(){// code}但是當我在做:$(「#」 myDiv「)。on(」click「,function(){// code}它和以前一樣是一樣的問題......當腳本與返回的HTML放在一起,但不在我的js文件中時它工作......你有任何想法爲什麼它的工作提交,但不是一個點擊事件... – blop

+0

好吧,我用.live解決了它(「click」...) – blop