我正在尝试使用$.get
来更新div的内容,但它在ie(9).
js
就是这个
function UpdateElementOfParent(box_id, page_ref, template_ref)
{
$.get("get_content.php", { box_id: box_id, page_ref: page_ref, template_ref:template_ref } )
.done(function(data) {
$('#'+box_id).html(data);
});
}
而get_content.php
就是这个
<?php
include("connect.php");
$page_ref = $_GET['page_ref'];
$template_ref = $_GET['template_ref'];
$box_id = $_GET['box_id'];
$sql = mysql_query("SELECT * FROM site_content WHERE page_ref='$page_ref' AND template_ref='$template_ref' AND box_id='$box_id' AND box_type='text'");
while($row=mysql_fetch_array($sql))
{
echo stripslashes($row['content']);
}
?>
它在firefox/chrome/safari and opera.
php会更新数据库但div ("#"+box_id)
不会更新ie
(手头只有ie9
所以不知道它只有9个版本还是其他版本)
任何线索?
快速更新
似乎ie正在缓存中的前一个$ .get调用中保存一些数据。基本上我在屏幕上有一个div,当用户点击一个按钮时,一个图层打开,其中一个textarea可以用nicedit编辑。 textarea填充$ .get,然后用户单击save,图层被隐藏,父页面上的原始div使用相同的$ .get调用进行更新。
即,如果我更改内容,则更新数据库但不更新div,当我打开图层时,它仍会显示旧数据。
第一个$ .get调用就是这个
$.get("get_content.php", { box_id: box_id, page_ref: page_ref, template_ref:template_ref } )
.done(function(data) {
document.getElementById("edit_content").value=data;
area1 = new nicEditor({fullPanel : true}).panelInstance("edit_content",{hasPanel : true});
});
警报数据不显示IE中的更新文本,所以它肯定与$ .get调用有关
答案 0 :(得分:0)
这不是答案,因为问题不完整,但我需要发布代码评论以协助OP。
正如你提到PHP工作正常,问题可能是IE不喜欢jQuery中的动态选择器。请尝试以下几个选项:
1)将$('#'+box_id).html(data);
更改为:
var id = '#'+box_id;
$(id).html(data);
2)尝试记录或警告元素,看看IE是否真正得到了元素:
var elem = $('#'+box_id);
alert(elem);
elem.html(data);
如果元素存在,这将显示为[HTMLDivElement]
或类似的内容。
3)如果所有其他方法都失败了,看看这个vanilla JS是否在IE中运行,以验证它不是jQuery选择器问题。
var elem = document.getElementById(box_id);
alert(elem);
elem.innerHTML = data;
答案 1 :(得分:0)
我弄明白了这个问题。与选择器无关,但与参数变量box_id
的范围有关。
将您的功能更改为:
function UpdateElementOfParent(box_id, page_ref, template_ref) {
myBox = box_id;
$.get("get_content.php", { box_id: box_id, page_ref: page_ref, template_ref:template_ref })
.done(function(data) {
$('#'+myBox).html(data);
});
}
<强>解释强>
AJAX回调函数无法访问UpdateElementOfParent
答案 2 :(得分:0)
好的问题解决了,我知道这是非常明显的事情。
在原始$ .get函数调用中我必须设置document.ready state
function get_edit_content(box_id,page_ref,template_ref)
{
$(document).ready(function() { <<<<<HERE
if(area1) {
area1.removeInstance('edit_content');
area1 = null;
document.getElementById("edit_content").value="";
}
$.get("get_content.php", { box_id: box_id, page_ref: page_ref, template_ref:template_ref } )
.done(function(data) {
document.getElementById("edit_content").value=data;
document.getElementById("page_ref").value=page_ref;
document.getElementById("template_ref").value=template_ref;
document.getElementById("box_id").value = box_id;
area1 = new nicEditor({fullPanel : true}).panelInstance("edit_content",{hasPanel : true});
});
});
}
感谢所有输入