2009-11-02 4 views
1

URL을 표준 HTTP GET 또는 AJAX 호출로 호출 할 수 있기를 원합니다.jquery를 사용하여 매개 변수를 ajax 호출에 추가하는 방법은 무엇입니까?

서버는 요청이 AJAX 요청인지 여부에 따라 요청을 약간 다르게 처리해야합니다.

jQuery를 사용하여 서버에서 식별 할 수 있도록 매개 변수를 자동으로 추가하여 원하는 모든 AJAX 요청에 매개 변수를 추가하고 전화를 걸 때 매개 변수를 추가하지 않아도됩니다.

jQuery.ajaxSend 이벤트 처리기를 사용하여이 작업을 시도했지만 그 시점에서 XMLHttpRequest가 이미 생성되었으며 URL 또는 데이터 멤버를 변경하면 효과가 나타나지 않으며 ' XMLHttpRequest 객체를 안정적으로 조작하는 방법을 알고있다. (Firebug에서 검사 할 수는 있지만 크로스 브라우저 방식으로 어떤 일을 할 수 있는지 알지 못한다.)

어떻게해야합니까? AJAX 요청을 식별하는 더 좋은 방법이 있습니까?

답변

2

정상적인 응답과 구분하기 위해 서버 측에서 XMLHttpRequest 값을 가진 x-requested-with 헤더를 테스트하는 것이 더 쉽고 간단 할 것이라고 생각합니다. 참고 : 헤더를 스푸핑하는 것은 매우 쉽습니다. 다음은 간단한 PHP의 예는 다음과 같습니다

function myAjax(opts) { 
    opts.data = opts.data || {}; // make sure it exists 
    opts.data.myParam = "42"; 
    $.ajax(opts); 
} 

그런 다음 다른 곳에 전화 :

function isAjax() { 
    return (isset($_SERVER['HTTP_X_REQUESTED_WITH']) && 
     ($_SERVER['HTTP_X_REQUESTED_WITH'] == 'XMLHttpRequest')); 
} 

if(isAjax()) { 
    // do something 
} else { 
    // do something else, or nothing 
} 
+0

항상이 헤더를받을 수 있습니까? 모든 브라우저에서 사용할 수 있습니까? 헤더를 스푸핑하기 쉽다는 것은 중요하지 않으며 추가 데이터가 노출되지 않으며 방금 다른 형식으로 반환됩니다. – SpoonMeiser

+0

@SpoonMeiser - 당신이 상당히 확신합니다. 프로덕션에서 위와 같은 코드를 사용하고 있으며, 테스트 한 모든 브라우저에서 작동합니다 (jQuery에서 지원하는 것과 동일한 브라우저에서 작동 함). – karim79

+0

@SpoonMeiser - ajax를 지원하는 모든 최신 브라우저에서 AFAIK를 전송합니다. – karim79

1

그냥 $.ajax를 호출하지만, 그것을 추가 자신의 기능을합니다. karim79가 말했듯이 X-Requested-With: XMLHttpRequest 헤더도 확인할 수 있습니다. 하지만 네, 두 가지 방법 모두 스푸핑하기가 쉽기 때문에 클라이언트가 소금 한 알을 가지고 당신을 보냅니다.

관련 문제