簡體   English   中英

使用AJAX和PHP時的緩存問題(也許)

[英]Issue with caching (maybe) when using AJAX and PHP

首先,我嘗試尋找一些類似的職位,但找不到任何東西。 主要是因為我在FF中而不是僅在IE中看到此問題。

我有一個網頁正在更新MySQL數據庫,但某些數據沒有問題。 然后今天,我改變了這樣做的方式,以便可以使用ID而不是值,因此對於大小,它是1、2和3,而不是小,中和大。

有問題的站點在這里 ,您可以輸入代碼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.即使選擇“中”或“大”。 這里發生了什么?

你的問題是你在打電話

document.getElementById('image_Size').value

就像Lizard所說的,您有3個具有相同ID的輸入。 document.getElementById將返回具有ID的第一個元素,因為ID應該被認為是唯一的

這是一種獲取選定值的方法,由於您已經包括了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:

nocache = new Date().getTime();

自Unix時代以來,這將為您提供以毫秒為單位的時間,因此每次用戶請求頁面時,時間都會有所不同。

如果您需要有關jQuery API的更多幫助,建議您從此處開始。

我希望這有幫助!

-斯蒂芬

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM