2014-01-08 3 views
1

어떤 경우에는 POST 매개 변수를 프로그래밍 방식으로 AJAX 요청에 추가해야합니다.ajaxSend에서 데이터 매개 변수를 올바르게 추가하는 방법은 무엇입니까?

$(document).ajaxSend(function(event, jqXHR, ajaxOptions) { 
    ajaxOptions.data = "additional_key=additional_value&" + ajaxOptions.data; 
    ajaxOptions.context.data = "additional_key=additional_value&" + ajaxOptions.context.data; 
    console.log(ajaxOptions, 'ajaxOptions'); 
}); 

을하지만 additional_key은 $ _POST 배열에 표시되지 않습니다

나는 이런 식으로 뭔가를 시도하고있다.

답변

9

이에 대한 ajaxPrefilter를 사용할 수 있습니다

$.ajaxPrefilter(function(options, originalOptions, jqXHR) { 
    if (originalOptions.type !== 'POST' || options.type !== 'POST') { 
     return; 
    } 

    options.data = $.extend(originalOptions.data, { yourdata : yourvalue }); 
}); 

더 infos에 대한 http://api.jquery.com/jquery.ajaxprefilter/를 참조하십시오.

+0

감사하지만 jQuery를 1.4.4을 사용합니다. Drupal 7과 최신 버전의 jQuery를 사용하면이 플랫폼에서 문제가 발생합니다. – drupality

+0

ajaxPrefilter가 jQuery 버전 1.5에 추가되었습니다. –

+3

jQuery 버전 btw에 대해서는 언급하지 않았습니다. –

2

상기 코드를 테스트하면 ajaxOptions.context이 정의되지 않았다는 오류가 발생했습니다. (즉, 문맥 적 정의 할 것입니다 가정) 모의 AJAX 요청이 데이터를 통해 전달되는 것을 저에게 보여 주었다 퇴장

if(ajaxOptions.context) { 
    ajaxOptions.context.data = "additional_key=additional_value&" + ajaxOptions.context.data; 
} else { 
    ajaxOptions.data = "additional_key=additional_value&" + ajaxOptions.data; 
} 

:

첫째, 먼저 존재 여부를 확인하는 것이 좋을 걸 Firebug에서 검사했을 때.

나는 상황에 맞는 라인을 제거하여 코드를 테스트하고, 작동 듯 :

코드 :

$(document).ajaxSend(function(event, jqXHR, ajaxOptions) { 
    if(ajaxOptions.context) { 
     ajaxOptions.context.data = "additional_key=additional_value&" + ajaxOptions.context.data; 
    } else { 
     ajaxOptions.data = "additional_key=additional_value&" + ajaxOptions.data; 
    } 
}); 

$.ajax({ 
    'url': 'test.php', 
    'data': {'foo':'bar'}, 
    'type': 'POST' 
}); 

검사 :

Key    Value 
additional_key additional_value 
foo    bar 

편집 : JQuery와 1.7.1로 테스트 jQuery의 하위 버전을 실행하고있는 것으로 나타났습니다.

0
$(document).ready(function() { 
    $(document).ajaxSend(function(event, jqXHR, ajaxOptions) { 
     if (ajaxOptions.extraData) { 
      ajaxOptions.extraData.additional_key = 'additional_value'; 
     } 
    }); 
}); 

나를 위해이 유일한 일 (jQuery를 1.4.4)