2010-04-27 2 views
6
에서 작동

나는 파이어 폭스와 크롬하지만 완벽 IE 작동 다음 아약스 호출이 : 그 사실에 대해 알고

function getAJAXdates(startDate, numberOfNights, opts) { 

    var month = startDate.getMonth() + 1; 
    var day  = startDate.getDate(); 
    var year = startDate.getFullYear(); 
    var d  = new Date(); 

    var randNum = Math.floor(Math.random()*100000000); 

    $.ajax({ 
     type  : "GET", 
     dataType : "json", 
     url   : "/availability/ajax/bookings?rand="+randNum,  
     cache  : false, 
     data  : 'month='+month+'&day='+day+'&year='+year+'&nights='+numberOfNights, 
     contentType : 'application/json; charset=utf8', 
     success  : function(data) { 
      console.log('@data: '+data); 
      insertCellData(data, opts, startDate); 
     }, 
     error:function(xhr, status, errorThrown) { 
      console.log('@Error: '+errorThrown); 
      console.log('@Status: '+status); 
      console.log('@Status Text: '+xhr.statusText); 
     } 
    }); 
} 

을 모든 변수는 올바른 내용을 전달하고 $ .ajax는 실제로 모든 매개 변수/값을 전달합니다.

LOG :

내가 오류에 무엇을 얻을 @error : 정의되지 않은 LOG : @status : parsererror LOG : @status 텍스트 : OK

내가 캐시 문제에 대해 알고 있어요 IE와 무작위 매개 변수를 구현 그것을 취소합니다.

header('Content-Type: application/json; charset=utf8'); 
header("Cache-Control: no-cache"); 
header("Expires: 0"); 
header('Access-Control-Max-Age: 3628800'); 
header('Access-Control-Allow-Methods: GET, POST, PUT, DELETE'); 

모든 : 여기

{ 
    "availability":[ 
     { 
     "inventory_id":"5", 
     "booking_id":"21", 
     "start_date":"05-01-2010", 
     "number_nights":4, 
     "text":"deFrancisco, Martin - $500.00 ACTIVE", 
     "type":"BOOKING" 
     } 
    ] 
} 

마지막으로 이들은 백엔드에서 다시 전송되는 헤더입니다 (내가 그것을 찰스를 사용하여 볼 수있어) 내가 다시 얻을 JSON입니다 아이디어?

답변

4

나는 contentType이 주석하고 dataType와 추가합니다 : http://api.jquery.com/jQuery.ajax/

데이터 형 "JSON"

을 : 다시 서버에서 기다리고있어 데이터의 유형.

contentType : 서버로 데이터를 보낼 때이 content-type을 사용하십시오.

당신은 json을 보내고 있다고 지정하고 있지만, 그렇지 않습니다 - 아마도 이것이 문제입니까?

+0

contentType을 추가하여 문제가 해결되는지 확인했지만 문제가없는 경우에도 작동하지 않습니다. 덕분에 – Sam3k

1

대부분의 경우 IE 고유의 구문 분석 오류는 추가 쉼표로 인해 발생합니다. 예를 들어 [1, 2, 3,]은 FF에서는 유효하지만 IE에서는 유효하지 않습니다. 어쨌든, 당신은 JSON 응답에 붙여 넣어야한다, 그것 없이는 문제를 말할 수 없다.

+0

JSON 개체가 괜찮은 것 같습니다. 나는 당신이 볼 수 있도록 원래의 질문에 그것을 추가했습니다. – Sam3k

0

페이지가 OK을 반환하는지 또는 'OK'을 반환하는지 확인하십시오. 'OK' 만 유효한 JSON입니다. JSONLint과 같은 도구를 사용하여 요청에서 오는 값을 확인하십시오.

+0

JSON은 JSONLint 테스트를 통과했습니다. 나는 "HTTP/1.1 200 OK"백을 얻는다. – Sam3k

0

alert(data); 또는 var myObject = eval('(' + data + ')');을 입력하면 어떻게됩니까?

그리고 url 표시 줄에 "get"(& param1 = param1value & param2 = ...)의 모든 매개 변수를 사용하여 브라우저에서 직접 함수를 호출하면 어떻게됩니까? 응답을 읽을 수 있어야합니다.

JSON 응답의 일부가 IE를 미친 짓입니다.

0

어떤 jQuery 버전을 사용하고 있습니까?

jquery의 코드를 확인하면 jQuery.httpData()가 호출 될 때 parsererror가 발생합니다.jquery의 코드는 다음과 같습니다.

if (status === "success") { 
    // Watch for, and catch, XML document parse errors 
    try { 
    // process the data (runs the xml through httpData regardless of callback) 
    data = jQuery.httpData(xhr, s.dataType, s); 
    } catch(err) { 
    status = "parsererror"; 
    errMsg = err; 
    } 
} 

아마도 jQuery.httpData()가 가치가 있습니다. 즉, jQuery.parseJSON이 호출되는지 여부와 실제로 객체를 반환하는지 확인할 수 있습니다.

if (typeof data === "string") { 
    // Get the JavaScript object, if JSON is used. 
    if (type === "json" || !type && ct.indexOf("json") >= 0) { 
    console.log(data); //add this 
    data = jQuery.parseJSON(data); 
    console.log("data parsed successfully"); //add this 
1

또한 $ .ajax() (jquery v1.4.2)와 다소 비슷한 문제가 발생했습니다. IE8에서는 작동하지 않지만 Firefox에서는 작동합니다.

그러나 IE8 디버그 도구 모음에서 내 페이지가 단조 모드임을 알았습니다. 그래서, 나는이 doctype <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">을 삽입하여 강제로 표준 모드에서 작동하도록 만듭니다. 갑자기 $ .ajax()가 작동합니다!

나는 단점/표준 모드에 대해 정말로 이해하지 못하고 있지만 "표준"이라는 단어는 어쨌든 Internet Explorer가 아닌 Firefox 또는 Chrome에 더 가깝습니다. 그래서 그것이 내가 그 아이디어를 얻은 방법입니다.

@see http://en.wikipedia.org/wiki/Quirks_mode

관련 문제