2013-03-28 3 views
3

Google 레일 애플리케이션에서는 PUT이 서버로 다시 변경되는 인라인 편집 기능이 있습니다. 편집 할 개체 유형/사용자가있는 페이지에 따라 PUT에 대한 URL이 변경되지만 동일한 JavaScript가 모든 페이지의 기능을 지원합니다. jQuery의 AJAX 요청이 서버를 건드리지 않고 때때로 실패하고 "오류"이외의 오류 메시지를 표시하지 않는 문제가 발생했습니다. 콘솔에서이 디버깅을 시도했지만 성공하지 못했습니다. 매우 이상한 부분은 URL에 문제가있는 $.ajax()으로 전달 된 것 때문인 것으로 보입니다. jQuery.ajax()가 일부 URL에는 요청을 보내지 못하지만 다른 URL에는 요청을 보내지 못합니다.

> errorCallback = function(jqxhr, status, err){ 
    console.log("Ajax call encountered an error: '" + status + "'"); 
    console.log(jqxhr); 
    console.log(err); 
    }; 
> options = { type: 'PUT', error: errorCallback, data: { cerebro: true, name: 'cerebro-edit-span-2-title', pk: null, value: 'Test' }, url: '/staff/employees/2.json' }; 
> test1 = $.ajax(options); 
> test1.readyState; 
    4 

그래서 나는 오류 콜백 해고와 AJAX 요청이 정상적으로 완료되는 것을 볼 수 있으며, 예상대로 4의 최종 readyState : 콘솔에서

이 예상대로 작동합니다.

이 다른 URL로
> options.url = '/staff/job_advertisements/2.json'; 
> test2 = $.ajax(options); 
    Ajax call encountered an error: 'error' 
    Object {readyState: 0, getResponseHeader: function, ... } // elided for clarity 

X PUT http://localhost:3000/staff/job_advertisements/2.json  jquery.js:8527 
> test2.readyState; 
    0 

심지어 응용 프로그램 서버에 도달하기 전에, AJAX 호출이 실패하지만 지금은 URL의 중간 부분을 변경하는 경우 조심! 개발 기계의 로그를 검토하면 /staff/job_advertisements/2.json에 대한 요청이 없습니다. 즉, 은 도 수신하지 않기 때문에 서버가 500 또는 404 또는 기타 오류 코드를 반환하기 때문에 이 될 수 없습니다. 브라우저에서 요청을. 문제가 클라이언트 측 (서버 측이 아니라 클라이언트 측)임을 입증하기 위해 (그리고 밑줄과 관련이있는 가능성을 배제하기 위해) URL을 애플리케이션에 실제로 존재하지 않는 몇 가지 값으로 설정해 보았습니다. 없음 로그 라인 시험 2 (실패한 경우)에 존재하지 반면, I는 또한, 상기 요청은 500 상태 코드, 애플리케이션 로그 생성 예외 참조 시험 3 및도 4에

> options.url = '/staff/jobadvertisements/2.json'; 
> test3 = $.ajax(options); 
X PUT http://localhost:3000/staff/jobadvertisements/2.json 500 (Internal Server Error) jquery.js:8527 
    Ajax call encountered an error: 'error' 
    Object {readyState: 4, getResponseHeader: function, ... } // elided for clarity 

> test3.readyState; 
    4 
> options.url = '/staff/empl_oyees/2.json'; 
> test4 = $.ajax(options); 
X PUT http://localhost:3000/staff/empl_oyees/2.json 500 (Internal Server Error) jquery.js:8527 
    Ajax call encountered an error: 'error' 
    Object {readyState: 4, getResponseHeader: function, ... } // elided for clarity 

> test4.readyState; 
    4 

. 따라서 테스트 3과 4는 요청 경로가 존재하지 않을 때 오류 메시지에 500 개의 상태 코드가 포함되어 있고 readyState이 여전히 4로 설정되어 있기 때문에 존재하지 않는 요청 경로에 문제가없는 것으로 나타났습니다. 밑줄이 허용되지 않는 문제는 아닙니다.

나는 ajax() 방법에 jQuery의 문서를 검색하고 내가 어떤 도움을 찾을 수 없습니다, 그래서 ... 자바 스크립트/jQuery를 지도자, 난 당신이 하나를 남겨 : 는 jQuery를 AJAX 요청을 일으킬 수있는 URL에 대해 그것을 무엇입니까 심지어 전송되기 전에 실패 하는가? 그리고 더 중요한 것은 어떻게 해결할 수 있습니까?

+1

좋은 질문에 감사드립니다. – Aneri

답변

5

AdBlock [Plus]를 사용하도록 설정 했습니까? 그렇다면 advertisements이 포함 된 URL에 대한 모든 요청을 자동으로 차단합니다. 또는 그렇게 보입니다. _advertisements.

+0

예! 감사합니다. 감사합니다. 이것은 정확히 문제가되었다. 이제 무거운 리팩토링을 위해 ... – Jazz

+0

Aneri, 내 기사 빛나는 갑옷. 고맙습니다. – wpp

+0

정말 하나 이상의 upvote 줄 수 있으면 좋겠다. – Jazz

관련 문제