我无法让这个更新脚本在IE中运行。适用于所有其他浏览器。 IE告诉我更新已执行。但事实并非如此。我没有更多的头发可以拔出来了。顺便说一下,我也试过$.ajax
和$.get
......但是没有运气。我认为它可能与live
点击处理程序有关。不知道......我已经尝试了所有的东西..(将标题放入无缓存,将随机数附加到我的url字符串的末尾)..没有fricken工作......爆炸IE。
这是我正在使用的$('.save').live('click')
函数:
$(".save").live("click", function(){
$.post("update.php", { cache : false, saveID : saveIt.value, saveMo : saveMonth, saveYr : saveYear, saveCtg : saveCt, saveThg : saveTh },
function(data){
if(data.success) {
$(textareaThoughts).hide();
$(saveIt).parents(".dirRowOne").find(".cancel").hide();
$(saveIt).parents(".dirRowOne").find(".edit, .del").show();
$(saveIt).hide();
$("#dirConsole").html(data.message);
} else if(data.error) {
}
}, "json");
return false;
});
这是update.php
<?php
if($_POST) {
$data['id'] = $db->escape_value($_POST['saveID']);
$data['months'] = trim($db->escape_value($_POST['saveMo']));
$data['years'] = trim($db->escape_value($_POST['saveYr']));
$data['cottages'] = trim($db->escape_value($_POST['saveCtg']));
$data['thoughts'] = trim(htmlentities($db->escape_value($_POST['saveThg'])));
$id = $data['id'];
$m = $data['months'];
$y = $data['years'];
$c = $data['cottages'];
$t = $data['thoughts'];
$query = "UPDATE //tablename SET month = '{$m}', year = '{$y}', cottage = '{$c}', thoughts = '{$t}' WHERE dirID = '{$id}'";
$result = $db->query($query);
if($result) {
$data['success'] = true;
$data['message'] = "Update Successful!";
} else {
$data['error'] = true;
}
echo json_encode($data);
}
?>
这是JSON响应:
{"id":"360","months":"June","years":"1990","cottages":"Cedar","thoughts":"Hello","success":true,"message":"Update Successful!"}
答案 0 :(得分:10)
我同意上面的答案。当没有使用缓存破坏字符串时,我已经看到IE浏览器带有AJAX请求,包括GET和POST。只需将随机缓存清除字符串附加到您的网址,如下所示:
$.post("update.php?ts="+new Date().getMilliseconds(), { cache : false, saveID : saveIt.value, saveMo : saveMonth, saveYr : saveYear, saveCtg : saveCt, saveThg : saveTh },
function(data){
...
它应该开始在IE中工作。
答案 1 :(得分:2)
最后! 我解决了我的问题,这是因为“同源策略”,只是在IE中加注!: 我只是将网址参数从'http://mysite.com/api/'更改为'/ api /' 它的工作原理!!!
希望对你们有些帮助!
答案 2 :(得分:0)
您是否尝试删除“return false”。这似乎取消了IE中的onclick事件。
答案 3 :(得分:0)
我想到的第一件事是AJAX请求的缓存问题。尝试将一个随机值(使用Math.Random()或任何你想要的东西)添加到POST请求中,看看会发生什么。我总是在GET请求中附加一个随机值,以确保响应是唯一的,但我不确定POST请求如何。
另请查看此链接,看看是否有任何适用情况: http://greenash.net.au/posts/thoughts/an-ie-ajax-gotcha-page-caching
答案 4 :(得分:0)
在这个过程中,我会设置一个服务器端日志,看看IE实际上发布了什么,以及它是否实际发布了什么,不是很多代码提示,但代码对我来说很好。
答案 5 :(得分:0)
我建议使用link text打开参数值捕获进行事后调试。它是免费的,所以试一试。
答案 6 :(得分:0)
您是否尝试使用基本的.ajax方法而不是后期抽象?
http://docs.jquery.com/Ajax/jQuery.ajax#options
也许它没有使用post方法检测数据类型。
这是一个适合我的完整ajax调用:
$.ajax({
type: "POST",
url: "content_admin.asmx/UpdateFolderDocumentOwner",
contentType: "application/json; charset=utf-8",
dataType: "json",
data: '{documentID:' + $("#did").val() + '}',
error: handleJsonError,
success: function() {
}
});
答案 7 :(得分:0)
更改
<meta http-equiv="content-type" content="text/html;charset=utf-8">
到
<meta charset="utf-8" /><meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1" />
为我工作。
答案 8 :(得分:0)
对于这些调试问题,请确保获得有关错误的一些信息。当出现问题时,IE往往会保持沉默,但有一种方法可以回复错误:
$.post("update.php",{data:"blabla"},function(){
/*... stuff to do on success...*/
},"json").fail(function(XMLHttpRequest,textStatus,errorThrown){
/*... display the errors here so you know what is wrong...*/
alert(textStatus+": "+errorThrown);
});
至少你知道什么是错的,你可以开始更有效地寻找合适的解决方案。