2009-10-11 3 views
4

IE에서 작동하도록이 업데이트 스크립트를 가져올 수 없습니다. 다른 모든 브라우저에서 잘 작동합니다. IE는 업데이트가 수행되었음을 알려줍니다. 그러나 그렇지 않았습니다. 나는 더 이상 머리카락을 꺼내지 않았습니다. BTW 나는 $.ajax$.get도 시도했다. 운이 없다. 나는 그것이 live 클릭 핸들러와 관련이있을 것이라고 생각하고있다. 모르겠다 ... 나는 모든 것을 시도했다. (URL 캐시 끝에 임의의 숫자를 붙이는 no-cache 헤더를 넣는다.) fricken은 작동하지 않는다 ... IE를 비난했다.

{"id":"360","months":"June","years":"1990","cottages":"Cedar","thoughts":"Hello","success":true,"message":"Update Successful!"} 
+0

무엇이 효과가 있습니까? – Greg

+0

IE7에서 업데이트를 수행하지 않습니다. 하지만 파이어 폭스, 오페라, 크롬, 사파리에서 그렇습니다. – Scott

+3

IE에서 일하는 것을 * 사랑 *하지 않습니까? –

답변

0

당신이 제거 시도 유무 :

$(".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 응답입니다이야 :

내가 사용하고있는 $('.save').live('click') 기능입니다 "false false". 이것은 IE에서 onclick 이벤트를 취소하는 것 같습니다.

+0

그것을 시도하지 않았습니다. 나는 그것을 줄 것이다. – Scott

+0

아니요. 아직 작업자가 없습니다. – Scott

+0

나는 본다. IE가 업데이트를 수행했다고 알려주면 IE가 data.success 블록 내에서 행을 실행 했습니까? 그리고 문제는 업데이트 된 데이터가 DB에서 업데이트되지 않았다는 것입니다. 그렇다면 IE가 POST 매개 변수에 보내는 내용을 구문 분석하는 방법에 문제가있을 수 있습니다. 즉, 다음과 같이 경고 할 수 있습니다. {cache : false, saveID : saveIt.value, saveMo : saveMonth, saveYr : saveYear, saveCtg : saveCt, saveThg : saveTh} saveMonth는 saveMonth.value 여야합니다. saveIt.value)? – devpl

0

가장 먼저 떠오르는 것은 AJAX 요청의 캐싱 문제입니다. 임의의 값 (Math.Random() 또는 원하는 것을 사용)을 POST 요청에 추가하고 어떤 일이 발생하는지 확인하십시오. 응답을 고유하게하기 위해 GET 요청에 항상 임의의 값을 추가하지만 POST 요청에 대해서는 확실하지 않습니다.

또한이 링크를 확인하고보고 그 중 하나가 적용되는 경우 : http://greenash.net.au/posts/thoughts/an-ie-ajax-gotcha-page-caching

+0

나는이 모든 제안을 시도했다 ... 아무 것도 작동하지 않는다. 정보 tho를위한 감사합니다. – Scott

+0

'POST '는 일반적으로 캐시되지 않습니다. 또한 IE는 그것을 알고 있습니다. – BalusC

0

을 나는 서버 측 로그를 설정하고 IE 실제로 게시되는 것을 볼 것이다 프로세스의이 시점에서 그것은 실제로 게시 된 경우 뭐, 코드 힌트는별로 없지만 코드는 나에게 잘 어울립니다.

10

나는 위의 대답에 동의합니다. 나는 cache-busting 문자열이 사용되지 않을 때 GET과 POST 모두 AJAX 요청으로 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에서 작동하기 시작해야합니다.

+0

GET이있는 페이지를 요청한 후 동일한 URL에 POST를 수행하고있는 것처럼 보입니다. IE7은 "오, 방금 얻었습니다. 왜 귀찮게합니까?"라고 말합니다. – bubbassauro

0

사후 디버깅을 위해 매개 변수 값 캡처가 활성화 된 link text을 사용하는 것이 좋습니다. 그것은 무료이므로 시도해보십시오.

0

포스트 추상화 대신 기본 .ajax 방법을 사용해 보셨나요?

http://docs.jquery.com/Ajax/jQuery.ajax#options

아마도 POST 메소드와 데이터 유형을 감지하지 못하고있다.

$.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

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

이 나를 위해 일한 :

여기에 나를 위해 작동하는 전체 아약스 호출입니다.

2

마침내!'http://mysite.com/api/' : 는 난 그냥에서 URL 매개 변수를 변경했기 때문에 "동일 출처 정책"그냥 IE 내거! : 의 내 문제를 해결 '/ api /' 그리고 작동합니다!

여러분 중 일부를 도울 수 있기를 바랍니다.

+5

당신은 자신의 대답을 받아 들여야합니다. – paislee

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

은 적어도 당신이 잘못 알고 당신이 올바른 솔루션을보다 효율적으로 검색 할 수 있습니다가.

관련 문제