2010-05-10 43 views
0

有人可以在這裏指出我正確的方向嗎? 基本上,我有這個jQuery的代碼片段:使用jQuery在mySQL base中存儲基本文本字符串?

$('.bggallery_images').click(function() { 
    var newBG = "url('" + $(this).attr('src'); 
    var fullpath = $(this).attr('src'); 
    var filename = fullpath.replace('img/Bakgrunner/', ''); 

    $('#wrapper').css('background-image', newBG); 

    // Lagre til SQL 
    $.ajax({ 
     url: "save_to_db.php", 
     // The url to your function to handle saving to the db 
     data: filename, 
     dataType: 'Text', 
     type: 'POST', 
     // Could also use GET if you prefer 
     success: function (data) { 
      // Just for testing purposes. 
      alert('Background changed to: ' + data); 
     } 

    }); 

}); 

這是當我點擊某個按鈕運行。所以它實際上是一個點擊處理程序。

如果我正確地理解了這一點,如果我剛剛單擊並刪除圖像,此代碼片段將採用源代碼,以便最終只使用文件名。如果我做了一個警報(文件名),我只得到文件名。所以這是行得通的。

但是,它會對名爲「save_to_db.php」的php文件執行ajax調用併發送數據:文件名。這是正確的嗎?然後,它執行一個提醒+數據的回調。

到目前爲止,這看起來是否正確?

因爲我的PHP文件看起來像這樣:

<?php 
require("dbconnect2.php"); 
$uploadstring = $_POST['filename']; 
$sessionid = $_SESSION['id']; 
echo ($sessionid); 
mysql_query("UPDATE brukere SET brukerBakgrunn = '$uploadstring' WHERE brukerID=" .$_SESSION['id']); 
mysql_close(); 
?> 

當我點擊圖像,jQuery的片斷火災和我得到這個PHP文件作爲提示框輸出的結果。我認爲變量是空的。 因爲注意到echo($ sessionid);這是我創建的一個變量,用於測試會話ID是什麼。它什麼都不返回。這裏可能是什麼問題?

編輯:我只是試圖回聲$ uploadstring變量以及它也沒有返回任何東西。這就像jQuery代碼片段甚至沒有將變量傳遞給php文件?

+0

OT,但是你的'var newBG =「url('」+ $(this).attr('src');'line想要'+')''在';'末尾。 – 2010-05-10 08:30:01

回答

2

您正在嘗試發送只是的文件名,但您正在檢索PHP代碼中的命名錶單字段。所以,你需要發送一個名爲表單域:

更改ajax電話這樣的:

$.ajax({ 
    url: "save_to_db.php", 
    // The url to your function to handle saving to the db 
    data: {filename: filename}, // <= Change #1 (give jQuery a simple object) 
    dataType: 'text',   // <= Change #2 ('text', not 'Text') 
    type: 'POST', 
    // Could also use GET if you prefer 
    success: function (data) { 
     // Just for testing purposes. 
     alert('Background changed to: ' + data); 
    } 

}); 

你的PHP腳本現在將收到一個POST varible叫filename它的價值來自於您的filename JavaScript變數。 (您也可以使用$.post要做到這一點,但它只是ajax一個包裝反正...)

傳遞一個簡單的對象到ajax呼叫發送字段到服務器的最簡單方法。 jQuery將採用該對象並通過使用該對象的鍵和字段名稱創建URL編碼的表單數據(爲您進行所有轉義)。因此,舉例來說,如果你給它這個對象:

data: {a: 1, b: "testing one two three", c: 3} 

...發送該URL編碼的數據:

a=1&b=testing+one+two+three&c=3 

(注意它是如何編碼它,以便我們。)更多的ajax docs(但請注意,目前文檔中關於數組處理的說法是錯誤的;詳情請參閱this bug report)。

+0

還要在服務器端腳本中添加'var_dump($ _ POST)'以進行測試。 – 2010-05-10 08:34:57

+0

好吧,所以這實際上返回的文件名:) 但只有當我做一個PHP文件中的變量的回聲。 但是,不會檢索會話ID。 我可以通過創建一個變量輕鬆地從我的index.php文件中檢索它:$ session_id = $ _SESSION ['id'];當我回應這個時,結果是'2',這是我的會話ID。我無法從save_to_db.php文件中檢索到它。任何想法爲什麼? – 2010-05-10 09:11:10

+0

對不起,發現還有另一個php文件似乎持有會話ID。我只需要解決頭緩存限制器錯誤。但是,感謝!你解決了這個問題! :) – 2010-05-10 09:32:56