2010-11-19 4 views
29

기본 $ .ajax()로 jQuery를 통해 비동기 HTTP (Ajax) 요청을 수행하고 있습니다. 코드는 다음과 같습니다 :jQuery AJAX 요청 데이터 옵션의 앰퍼샌드 (&) 문자

$("textarea").blur(function(){ 
    var thisId = $(this).attr("id"); 
    var thisValue = $(this).val(); 

    $.ajax({ 
     type: "POST", 
     url: "some.php", 
     data: "id=" + thisId + "&value=" + thisValue, 
     success: function(){ 
     alert("Saved successfully!"); 
     } 
    }); 

}); 

모든 것이 텍스트 영역 앰퍼샌드 (&) 문자 내부에 사용자가 입력 할 때까지 제대로 평소와 같이 노력하고 있습니다. 값을 저장하는 PHP 함수를 디버깅 할 때보 다이 문자까지 항상 값을 갖습니다.

필자는 어떻게 든 앰퍼샌드 (&)를 건너 뛰는 해결책이 있어야한다고 생각합니다. 어떤 아이디어? 대신

답변

81

:

data: "id=" + thisId + "&value=" + thisValue 

는 수행

data: { id: thisId, value: thisValue } 

이 방법 JQuery와 제대로 URL이 값을 인코딩 처리됩니다. 문자열 회씩 연결은 자바 스크립트 기능 encodeURIComponent() 사용

+5

+1 아마도 * 모든 *이 아닐 수 있습니다. :-) –

+0

하지만 단순한 $ _POST []를 사용하여 PHP 파일에서 값을 가져올 수 있습니까? 문자열에서 값을 전달하는 것과 동일합니다. –

+0

@Nikita, yeap, 절대적으로 같은 방식. 차이점은 제대로 인코딩된다는 것입니다. –

6

:-) 모든 악의 뿌리입니다

$("textarea").blur(function(){ 
    var thisId = $(this).attr("id"); 
    var thisValue = $(this).val(); 

    $.ajax({ 
     type: "POST", 
     url: "some.php", 
     data: "id=" + thisId + "&value=" + encodeURIComponent(thisValue), 
     success: function(){ 
     alert("Saved successfully!"); 
     } 
    }); 

}); 
+0

당신을 downvote 누군가가 너무 늦었 결코 : D – mkey

26

강하게 당신이 위의 모든 경우에 가능한 solution provided by Darin를 사용하는 것이 좋습니다를; 그런 식으로 POST 데이터를 작성하기 위해 잘 테스트 된 코드를 재사용 할 수 있습니다. (사용자 입력 중 쿼리 문자열이나 POST 데이터를 만들 때 응용 프로그램의 다른 곳에서 여기, 나) 당신은 정말, 정말, 정말 문자열 연결을 사용해야 할 경우

는, 당신은 사용할 필요가 encodeURIComponent :

$("textarea").blur(function(){ 
    var thisId = $(this).attr("id"); 
    var thisValue = $(this).val(); 

    $.ajax({ 
     type: "POST", 
     url: "some.php", 
     data: "id=" + encodeURIComponent(thisId) + "&value=" + encodeURIComponent(thisValue), 
     success: function(){ 
     alert("Saved successfully!"); 
     } 
    }); 
}); 

기본적으로 jQuery.ajax을 사용하여 POST을 전송하면 콘텐츠 유형이 application/x-www-form-urlencoded 인 데이터를 전송하게됩니다. 즉, 데이터가 그런 방식으로 인코딩되었음을 약속합니다. 당신은 거래의 일부를 유지하고 실제로 그것을 인코딩해야합니다. 이것은 앰퍼샌드에서 중요하지 않습니다.

+0

+1 설명하는 _why_ 오류가 발생하고 그것을 해결하는 방법. – sholsinger

+0

나는 실제로 이것을 시도하고 그것은 작동하지 않았다. 또한'&'을'& '으로 바꾸려고 시도했지만 놀랍게도 아무 것도하지 않았습니다. –

+1

@EduardLuca : * "실제로 시도해 보았지만 효과가 없었습니다."* (아마도 자신의 질문에) 몇 가지 특성을 제공해야하며, 'encodeURIComponent' **는 ** 올바른 방법입니다.* "나는 또한 & &을 대체하려고 시도했지만 놀랍게도 아무것도하지 못했습니다."실제로 URI 인코딩과 아무런 관련이없는 HTML 엔터티 인코딩이므로 실제로 놀랍지 않습니다. –

0
$.ajax({ 

    type:'POST', 
dataType: "text", 
    url:'save.php', 
    data:'_id='+$('#id').val()+'&title='+$('#title').val(), 
?? 
data: { id: thisId, value: thisValue } 
+0

당신이 제공하는 솔루션인가요? –