2009-09-01 110 views
0

爲什麼以下代碼不能提取表單?它只是做一個正常的PHP職位,而不會引發任何錯誤...jQuery Ajax提交問題

我對此也使用blockUi,因此阻止/取消阻止。

$(document).ready(function(){ 
    $("input.update").click(function(){ 
     var str = $(this).parent().serialize(); 
     $(this).parent().parent().block({ message: "<span class=\"loading\"><img src=\"<?php echo $siteUrl ?>/admin/template/images/loading.gif\" alt=\"loading...\" /><p>Updating...</p></span>" }); 
     $.ajax({ 
      type: "POST", 
      url: "forms/update.php", 
      data: str, 
      success: function(){ 
       $("div.edit_box").unblock(); 
       $("div.edit_box").append("<span class=\"success\">This has been updated!</span>"); 
      } 
     }); 
     return false; 
    }); 
}); 

這是我第一次嘗試使用jQuery的Ajax功能,請耐心等待。

回答

1

因爲它似乎你只使用後的「成功」回調,你可以使用.post方法,這是對眼睛更容易一些。您也可以將這些塊調用放入ajaxStartajaxStop。對我來說很整潔。

$(this).parent().parent().block對我來說似乎是錯誤的,我將它改爲引用用於解鎖的相同元素。我也正在檢查PHP腳本的輸出,以確保無論您正在更新是否更新了(只需從PHP回顯XML,您將在控制檯日誌中看到它)。

$(function() { 
    // Apply click handlers to anchors 
    $("input.update").click(function(e){ 
     // Stop normal link click 
     e.preventDefault(); 

     var str = $(this).parent().serialize(); 

     // Send request 
     var action = "forms/update.php"; 
     $.post(action, {data:str}, function(xml) { 
      console.log(xml); 
      $("div.edit_box").append("<span class=\"success\">This has been updated!</span>"); 

     }) 
    }); 

    // Adds a wait indicator to any Ajax requests 
    $(document.body).ajaxStart(function() { 
     $("div.edit_box").block({ message: "<span class=\"loading\"><img src=\"<?php echo $siteUrl ?>/admin/template/images/loading.gif\" alt=\"loading...\" /><p>Updating...</p></span>" }); 

    }).ajaxStop(function() { 
     $("div.edit_box").unblock(); 
     $("div.edit_box").append("<span class=\"success\">This has been updated!</span>"); 
    }); 
}); 
+0

這已經完成了工作,謝謝!你有什麼想法,爲什麼原來的腳本不工作?此外,我使用雙父母,因爲同一頁面上有多個相同類別的框,我不希望他們全部一次更新其內容。 – phil 2009-09-02 08:19:47

+0

我不確定,我以爲這個.parent.parent的東西看起來有點奇怪,但我不知道這是不正確的。另外,我從來沒有真正使用.ajax調用,所以可能會遇到一些問題。 很高興幫助!我只是自己學習ajax/php,所以它有點新。 既然你說你使用的是Firebug,你可以使用console.log($(this).parent()。parent())來查看它是否真的返回你的想法..我一直使用console.log,因爲我的對javascript的理解有點不穩定。 – aland 2009-09-02 13:30:09

+0

另外,你使用FirePHP嗎?它是螢火蟲的延伸,可以讓你從php輸出到控制檯!很時髦,例如 - $ firephp = FirePHP :: getInstance(true); $ firephp-> log($ _ SESSION,「我的php會話中發生了什麼?」); 只要確保在將PHP腳本上傳到生產服務器時刪除了所有這些調用! :) – aland 2009-09-02 13:32:05

2
("input.update").click(function(){ 

應該

$("input.update").click(function(){ 
+0

對不起,這裏有一個錯誤,$實際上已經存在於腳本中,但由於某種原因沒有出現在示例中。 – phil 2009-09-01 14:59:42

+0

你使用一些工具來調試JavaScript? – riotera 2009-09-01 15:06:23

+0

另外,如果你想通過ajax提交表單,你可以使用submit事件或者ajax表單插件http://malsup.com/jquery/form/ – riotera 2009-09-01 15:09:43