jQuery $ .post更新无法在IE中运行

时间:2009-10-11 15:50:10

标签: jquery ajax json internet-explorer-7

我无法让这个更新脚本在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!"}

9 个答案:

答案 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);
});

至少你知道什么是错的,你可以开始更有效地寻找合适的解决方案。