2009-11-25 44 views
0

首先,我嘗試了一些類似的帖子,但是找不到任何東西。主要是因爲我在FF中看到這個問題,而不是IE。使用AJAX和PHP時緩存問題(可能)

我有一個網頁更新MySQL數據庫沒有問題的一些數據。然後今天,我改變了這樣做的方式,以便我可以使用ID而不是數值,所以對於尺寸,而不是小,中,大,它是1,2和3.

有問題的網站是here,你可以通過輸入代碼1234進入測試畫廊。

我每次添加到籃子都會得到腳本。

所以下單選按鈕,有值1,2和3

該位的HTML如下:

<input type="radio" name="imageSize" id="imageSize" value="1"/> Small (6x4) - &pound;4.99<br/> 
<input type="radio" name="imageSize" id="imageSize" value="2"/> Medium (7x5) - &pound;6.99<br/> 
<input type="radio" name="imageSize" id="imageSize" value="3"/> Large (8x6) - &pound;10.99 

我已決定爲現在在手代碼它讓它工作。

這被髮送到一個包含JavaScript文件,然後根據從而被髮送到插入頁:

unction createObject() { 
var request_type; 
var browser = navigator.appName; 
if(browser == "Microsoft Internet Explorer"){ 
request_type = new ActiveXObject("Microsoft.XMLHTTP"); 
}else{ 
request_type = new XMLHttpRequest(); 
} 
return request_type; 
} 

var http = createObject(); 

/* -------------------------- */ 
/* INSERT */ 
/* -------------------------- */ 
/* Required: var nocache is a random number to add to request. This value solve an Internet Explorer cache issue */ 
var nocache = 0; 
function insert() { 
// Optional: Show a waiting message in the layer with ID login_response 
document.getElementById('insert_response').innerHTML = "Just a second..." 
// Required: verify that all fileds is not empty. Use encodeURI() to solve some issues about character encoding. 
var image= encodeURI(document.getElementById('image').value); 
var image_Size= encodeURI(document.getElementById('image_Size').value); 

alert(image_Size); 
alert(nocache); 

// Set the random number to add to URL request 
nocache = Math.random(); 
// Pass the login variables like URL variable 
http.open('get', 'insert.php?image='+image+'&imageSize='+image_Size+'&nocache = '+nocache); 
http.onreadystatechange = insertReply; 
http.send(null); 
} 
function insertReply() { 
if(http.readyState == 4){ 
var response = http.responseText; 
// else if login is ok show a message: "Site added+ site URL". 
document.getElementById('insert_response').innerHTML = 'Image added:'+response; 
} 
} 

正如你所看到的,無論發生什麼情況,警報彈出說1.即使你選擇中型或大型。這裏發生了什麼?

回答

1

你這裏的問題是,您所呼叫

document.getElementById('image_Size').value 

像蜥蜴說,你有3個輸入具有相同的ID。 document.getElementById將返回帶有ID的第一個元素,因爲ID應該是唯一的

這裏是一種獲取選定值的方法,既然你有jQuery包含,我會寫在jQuery爲你。

var image_Size = 0; 
$('[name=image_Size]').each(function() { 
    if ($(this).attr('checked')) image_Size = $(this).val(); 
}); 

而一點點的谷歌搜索發現這個漂亮的節省時間!

var image_Size = $('[name=image_Size]:checked').val(); 

我希望這有助於!而且,你可能需要設置非緩存不同:

nocache = new Date().getTime(); 

這會給你自Unix紀元毫秒的時間,所以這將是不同的,每次用戶請求頁面。

如果您需要更多關於jQuery API的幫助,我建議您開始here

我希望這有助於!

-Stephen

+0

謝謝。 回想起來我無法相信我犯了這樣一個學校男孩的錯誤。猜猜發生這種事時會發生什麼。 謝謝。 – 2009-11-26 09:27:56