2014-03-07 87 views
5

單擊某個按鈕時,我想從數據庫中刪除某些內容。運行SQL的AJAX請求後不需要的頁面刷新

以下是我的點擊處理程序。

$('.deleteLesson').click(function() { 
    $.get('/Assignment/Modules/DeleteLesson.cshtml?LessonID=' + lessonID,function(data){ 
    }); 
}); 

裏面DeleteLesson.cshtml,我有以下

var db = Database.Open("database"); 
db.Query("DELETE FROM Lessons WHERE [email protected]", Request.QueryString["LessonID"]); 

$.get運行時,SQL是在我的數據庫中執行,但它迫使我原來頁面上的刷新。我無法弄清楚爲什麼。通過故障排除,我發現它完全是導致刷新的db.Query行,而沒有其他。

需要明確的是:我可以註釋掉db.Query線和它的作品正是我希望它(除非它不會刪除的項)

+1

'返回false;'$不用彷徨後'();'呼叫 – zerkms

+0

@zerkms沒有運氣,對不起。我認爲這必定意味着它不是JavaScript,迫使我刷新? – Andy

+0

它是javascript。加載頁面後 - 只有JS可以影響其行爲 – zerkms

回答

3

我不知道是該笑還是哭了...原來我live.js被強制刷新,因爲它看到了變化,想爲我更新頁面。 (按照預期,我從來沒有料到它會在這種情況下這樣做)。

感謝大家的幫助...

+0

反過來,笑和哭都會聽起來合適:) – Matthew

0

試試這個:

$('.deleteLesson').click(function (el, event) { 
    event.preventDefault(); 
    $.get('/Assignment/Modules/DeleteLesson.cshtml?LessonID=' + lessonID,function(data){ 
    }); 
}); 

還要檢查lessonID是否正確傳遞給QueryString集合。 SQL查詢可能因此而失敗。

+2

對不起,說我們需要防止默認,如果它的按鈕或超鏈接停止默認動作來執行..但這已經是一個div所以它沒有任何意義調用** preventDefault()** –

+0

我猜它是一個錨點,它會默認預置一個同步GET。 – reach4thelasers

+2

@ reach4thelasers通過OP查看註釋,它是一個div。 – Kami

2

對評論有點長 - 但它運行時不運行查詢的事實很有趣。如果您嘗試從文檔page下面會發生什麼:

  1. 請求的頁面,而忽略結果 - (簡單的調用):

    $('.deleteLesson').click(function() { 
        $.get('/Assignment/Modules/DeleteLesson.cshtml?LessonID=' + lessonID); 
    }); 
    
  2. 警報在每一個可能的結果 - 看看處理程序調用是否有意義,或者被調用的所有:

    var url = '/Assignment/Modules/DeleteLesson.cshtml?LessonID=' + lessonID; 
    var jqxhr = $.get(url, function() { 
        alert("success"); 
    }) 
        .done(function() { 
        alert("second success"); 
        }) 
        .fail(function() { 
        alert("error"); 
        }) 
        .always(function() { 
        alert("finished"); 
        }); 
    

怎麼樣這樣的帖子:

$.ajax({ 
type: "POST", 
url: "/Assignment/Modules/DeleteLesson.cshtml", 
data: { LessonID: lessonID } 
}) 
.done(function() { 
    alert("Record Deleted"); 
}); 

最後,你有沒有試着用$.ajax代替$.get速記調用?這使您可以訪問其他options

1

嘗試

$('.deleteLesson').click(function (e) { 
    e.preventDefault(); 
    $.get('/Assignment/Modules/DeleteLesson.cshtml?LessonID=' + lessonID,function(data){ 
    //code here 
    }); 
}); 
0

創建你的控制器的操作,並且不使用呼叫到CSHTML頁面。

public class LessonControler{ 

    [AllowGet] 
    public JsonResult DeleteLesson(long LessonID){ 
     //DoTheDeletion magic here 
     return Json(new {Done="OK", Error=""}, JsonRequestBehavior.AllowGet); 
    } 

} 

並更改JavaScript來匹配新的行動呼籲

$('.deleteLesson').click(function() { 
    $.get('/Lesson/DeleteLesson?LessonID=' + lessonID,function(data){ 
    }); 
}); 

甚至更​​好變換這帖子jQuery.post()