Обновление jQuery $ .post не работает в IE - PullRequest
4 голосов
/ 11 октября 2009

Я не могу заставить этот скрипт обновления работать в IE. Прекрасно работает в любом другом браузере. IE говорит мне, что обновление было выполнено. Однако это не так. У меня больше нет волос, чтобы вытащить .. Кстати, я пробовал $.ajax и $.get тоже ... пока не повезло. Я думаю, что это может быть связано с обработчиком кликов live. Не знаю ... Я попробовал все .. (поместив заголовки для no-cache, прикрепив случайное число к концу моей строки 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!"}

Ответы [ 9 ]

10 голосов
/ 16 ноября 2009

Я согласен с ответом выше. Я видел хлопот IE с AJAX-запросами, как GET, так и POST, когда строка очистки кеша не используется. Просто добавьте случайную строку очистки кеша к вашему URL-адресу следующим образом:

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

и он должен просто начать работать в IE.

2 голосов
/ 06 августа 2011

Наконец-то! Я решил свою проблему из-за "той же политики происхождения" и просто поднял в IE !: Я только что изменил параметр URL с: 'http://mysite.com/api/' на ' / api / ' и это работает !!!

надеюсь, что это поможет некоторым из вас!

0 голосов
/ 11 февраля 2013

Для устранения проблем, подобных этим, убедитесь, что вы вернули некоторую информацию об ошибке. 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);
});

По крайней мере, вы знаете, в чем дело, и вы можете более эффективно искать правильное решение.

0 голосов
/ 03 августа 2011

Изменение

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

работал для меня.

0 голосов
/ 28 ноября 2009

Вы пытались использовать базовый метод .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() {

    }
});  
0 голосов
/ 27 ноября 2009

Я рекомендую использовать текст ссылки с включенным захватом значения параметра для посмертной отладки. Это бесплатно, так что попробуйте.

0 голосов
/ 17 октября 2009

На этом этапе процесса я настраивал журнал на стороне сервера и смотрел, что на самом деле публикует IE, и если он действительно что-то публиковал, это не большая часть подсказки кода, но код выглядит хорошо для меня.

0 голосов
/ 11 октября 2009

Первое, что приходит мне в голову, это проблема кеширования по запросу AJAX. Попробуйте добавить случайное значение (используя Math.Random () или что угодно) к запросу POST и посмотрите, что произойдет. Я всегда добавляю случайное значение к запросам GET, чтобы убедиться, что ответы уникальны, но я не уверен насчёт запроса POST.

Также проверьте эту ссылку и посмотрите, применимо ли это: http://greenash.net.au/posts/thoughts/an-ie-ajax-gotcha-page-caching

0 голосов
/ 11 октября 2009

Вы пытались убрать «return false». Это похоже на отмену события onclick в IE.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...