2010-04-20 12 views
1

여러 양식이있는 페이지에서 jQuery에 의해 AJAX로 된 양식이 있습니다. 나는 $.ajax 기능에 대한 래퍼입니다 다음과 같은 기능을 수행하고 있습니다 :JSON 응답이 null이지만 URL이 정확하게 반향합니다.

function do_json_get(uri){ 
    var ret = ''; 
    var url = AJAX_URL + uri; 

    $.ajax({ 
     type: 'GET', 
     url: url, 
     async: false, 
     success: function(data) { 
      ret = data.html; 
     }, 
     dataType: 'json' 
    }); 

    return ret; 
} 

내가 (이 PHP에서 폼을 렌더링하고) 직접 AJAX 서버로 이동, 내가 원시 JSON 응답을 얻을 수를 - 그래서 나는 서버가 브라우저로 출력된다는 것을 알고 있으며, AJAX 서버는 적절한 쿠키를 설정하는 것과 같은 다른 일을하고있다. 그래서 나는 연결이 좋다는 것을 안다. (나는 200 응답 코드를 얻는다.) 그러나 data 개체가 null로 돌아오고 있습니다.

+0

JSON 모양이 어떻게됩니까? – darcy

+0

그냥 { 'html': } ... URL을 다시 방문하여 브라우저에서 올바른 형식의 HTML을 얻을 수는 있지만 HTML GET도 null이라는 점에 유의해야합니다. –

+0

이 제대로 인코딩 되었습니까? 즉. addslashes()와 같은 것? – darcy

답변

3

크게 흔적입니다 여기에 추측 알고있다. 파일 시스템에서 페이지를 제공하는 경우 Firefox (및 Chrome은 다른 도메인에서 생성 된 것으로 간주합니다). 200 응답을 얻지 만 데이터는 얻지 못합니다.

Safari를 시도하거나 번을 json 대신 찍어주세요.

편집 :

다른 도메인에서 데이터를 얻고 있기 때문에,이 작동하지 않습니다. 나는 그것이 XMLHTTPRequest에 의해 허용되지 않는다고 생각한다.

+0

jsonp가 도메인 외부에서 필요하다는 것을 알지 못했습니다. 고맙습니다! –

-1

오, 소년. 이 질문은 다시.

AJAX : 비동기 JavaScript 및 XML *. 비동기. 비동기. 비동기. AJAX 호출에 성공 핸들러 함수 이전

함수, do_json_get() 반환 ret가 실행됩니다. 여기서는 위에서 아래로의 조작 순서가 진행되지 않습니다. 즉, 당신은 그렇게 할 수 없습니다.

비동기 특성으로 인해 AJAX는 콜백 (callback)에서 작동하고 반환 값은 사용하지 않습니다. 패러다임을 바꿔야합니다. 성공 처리기 함수는 data.html 자체에서 필요한 작업을 수행하거나 다른 함수로 전달해야합니다.

* 네, 원래 글자의 XML 부분은 요즘

+0

$ .ajax 호출에서 async : false를 지정하지 않으면 위와 같은 경쟁 조건을 피할 수 있습니다. 그가 막히게했기 때문에 –

+0

-1. – Leo

+0

@b. 이자형. hollenbeck, 왜냐하면'async'를'false'로 설정할 수 있다고해서이 경우에해야만한다는 것을 의미하지는 않습니다. 콜백 내에서 JSON을 처리하거나 대리자 메서드를 사용합니다. –

관련 문제