【问题标题】:jQuery $.post update not working in IEjQuery $.post 更新在 IE 中不起作用
【发布时间】:2009-10-11 15:50:10
【问题描述】:

我无法让这个更新脚本在 IE 中运行。在其他所有浏览器中都可以正常工作。 IE 告诉我更新已执行。然而,事实并非如此。我没有更多的头发可以拔了..grr。顺便说一句,我也试过$.ajax$.get .. 仍然没有运气。我认为这可能与live 点击处理程序有关。不知道...我已经尝试了一切...(将标头放置为无缓存,在我的 url 字符串的末尾附加一个随机数)...没有任何效果...炸毁 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!"}

【问题讨论】:

  • 它不会在 IE7 中执行更新。但它在 Firefox、Opera、Chrome 和 Safari 中确实如此。
  • 你不只是喜欢让事情在 IE 中运行吗?
  • @Matt Ball => 不,我不知道 :) 我的意思是来吧,已经够了。死吧,死吧,死吧,死吧!!!!!!

标签: jquery ajax json internet-explorer-7


【解决方案1】:

我同意楼上的回答。当不使用缓存清除字符串时,我已经看到带有 AJAX 请求(GET 和 POST)的 IE 崩溃。只需将随机缓存破坏字符串附加到您的 URL,如下所示:

    $.post("update.php?ts="+new Date().getMilliseconds(), { cache : false, saveID : saveIt.value, saveMo : saveMonth, saveYr : saveYear, saveCtg : saveCt, saveThg : saveTh },
      function(data){
...

它应该刚开始在 IE 中工作。

【讨论】:

  • 看起来如果您使用 GET 请求了一个页面,而您现在正在对同一个 URL 进行 POST,IE7 只是说“哦,我刚刚知道了,为什么要麻烦?”
【解决方案2】:

终于! 我解决了我的问题,这是因为“同源政策”,只是在 IE 中提出!: 我刚刚将 URL 参数从 'http://mysite.com/api/' 更改为 '/api/' 它有效!!!

希望对大家有所帮助!

【讨论】:

    【解决方案3】:

    您是否尝试过删除“return false”。这似乎取消了 IE 中的 onclick 事件。

    【讨论】:

    • 我明白了。当您说 IE 告诉您它执行了更新时,是否意味着 IE 执行了 data.success 块中的行?问题是应该更新的数据没有在您的数据库中更新?如果是这样,那么 IE 如何解析您发送给 POST 参数的内容可能存在问题?也就是说,也许您可​​以尝试警告以下内容: { cache : false, saveID : saveIt.value, saveMo : saveMonth, saveYr : saveYear, saveCtg : saveCt, saveThg : saveTh } 也许 saveMonth 应该是 saveMonth.value (就像 saveIt.值)?
    • 是的...它通过了data.success 块,并表示更新成功。我用于 saveMonth 的 var 是值。奇怪的东西......我认为某种缓存问题。
    【解决方案4】:

    我首先想到的是 AJAX 请求的缓存问题。尝试将随机值(使用 Math.Random() 或任何您想要的)附加到 POST 请求,看看会发生什么。我总是将随机值附加到 GET 请求以确保响应是唯一的,但我不确定 POST 请求如何。

    还请查看此链接,看看是否适用: http://greenash.net.au/posts/thoughts/an-ie-ajax-gotcha-page-caching

    【讨论】:

    • 我已经尝试了所有这些建议......没有任何效果。谢谢你的信息。
    • POST 通常不会被缓存。 IE 也知道这一点。
    【解决方案5】:

    在这个过程中,我会设置一个服务器端日志并查看 IE 实际发布的内容,如果它实际发布任何内容,代码提示不多,但代码对我来说看起来不错。

    【讨论】:

      【解决方案6】:

      我建议使用 link text 并打开参数值捕获以进行事后调试。它是免费的,请尝试一下。

      【讨论】:

        【解决方案7】:

        您是否尝试过使用基本的 .ajax 方法而不是 post 抽象?

        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() {
        
            }
        });  
        

        【讨论】:

          【解决方案8】:

          变化

          <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" />
          

          为我工作。

          【讨论】:

            【解决方案9】:

            对于此类调试问题,请确保您获得有关错误的一些信息。当出现问题时,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);
            });
            

            至少您知道出了什么问题,并且可以开始更有效地寻找正确的解决方案。

            【讨论】:

              猜你喜欢
              • 1970-01-01
              • 2012-06-07
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 2016-06-02
              • 1970-01-01
              • 2012-10-07
              相关资源
              最近更新 更多