2012-10-25 65 views
2

我是新的django和jquery,我嘗試實現一個非常簡單的$ post請求。在Django的jquery帖子

這裏是我做過什麼:

我的JS:

$.post(/mysite/blabla/, { 
score : 40 
}); 

我的看法:

def blabla(request): 
    score_user = 20 
    if request.method == 'POST': 
     score_user = request.POST['score'] 

控制檯不指示POST請求的任何錯誤。事情是,當我渲染「score_user」,我總是得到20,當我期望得到40.

任何幫助將受到歡迎。由於

編輯:

我的模型:

class UserProfile(FacebookProfileModel): 
     user = models.OneToOneField(User) 
     comment = models.BooleanField() 
     score = models.IntegerField(null=True, default=0) 
+0

它發生由於在視圖功能,該值的分數以某種方式未在POST未來的一部分。嘗試打印:打印request.POST ['分數'],看看你得到什麼。另一方面,我不知道jquery,但字典式對象具有以下方案:{key:value,}其中鍵幾乎總是一個字符串try:{'score':40} – PepperoniPizza

+0

這只是JavaScript; '{分數:40}'和'{'分數':40}'完全相同。 –

回答

0
$.post('/mysite/blabla/', {'score': 40}, function(data) { 
    $('.result').html(data); 
}); 
+0

謝謝,這個答案非常清楚,它對我有很大的幫助。但是當我進入我的頁面/ mysite/blabla時,它仍然呈現20,而不是40。這是正常的嗎? –

+0

我使用SQLite。但在這種情況下,20來自我的觀點。在嘗試直接通過jquery請求修改數據庫之前,我想做一些簡單的事情。但那最後我想做什麼。 P.S:我編輯了我的問題,向你展示了我的模型。 –

+0

非常感謝,這正是我想要做的!謝謝你的時間,你幫了我很多! –

0

試試這個:

$.post("/mysite/blabla/", { score : 40 }, function(data){ 
    // alert(data); 
    $("#results").html(data); 
}); 

HTML:

Score: <span id='results'></span> 
+0

嗨。謝謝您的回答。當我這樣做,我回到頁面的HTML與(不blabla)我有一個彈出窗口說:「頁面本地主機:8000說:40」。但是當我繼續使用mysite/blabla時,我的頁面仍然會顯示20。 –

+0

好吧,它看起來像在彈出窗口中呈現我的/ blabla /的html。但是我想要做的是使用post請求來修改我的Django應用程序的一個對象。例如,我的用戶的對象分數。你有什麼想法如何做到這一點?非常感謝你! –

+0

是啊,你想修改的區域取決於分數,用span或者div來代替id,如下所示:score = ,然後像這樣填充它:$(「 #results「)的html(數據)。我已經完善了我的答案來幫助你 – Relentless

0

你需要URL編碼要傳遞的參數到你看來唱歌&。除了POST請求之外,除非已禁用它,否則需要csrfmiddlewaretokenstatus將根據要求提醒。

$.post('/mysite/blabla/','score=40&csrfmiddlewaretoken='+'{{csrfmiddlewaretoken}}'). 
success(function(data, status, xhr) { alert(status)}). 
error(function(data, status, xhr) { alert(status)}) 

.success.errorsyntax是jquery的promise接口

+0

好的,謝謝,它工作得很好。但是現在,我如何使用這個值(分數= 40)來修改我的一個對象?例如,我是否想用ajax請求發佈的分數替換用戶的分數? –

+0

@VictoriaBaboule可以通過執行'request.user'來訪問視圖中的用戶。然後繼續過濾你需要的模型,將'Player'稱爲'p = Player.object.get(user = user)',然後執行'p.score + = score',然後執行'p.save()'。確切的要求會根據您的需要而有所不同,但希望您明白了。 –