2012-06-03 3 views
4

JSON 및 jQuery (.toJSON 함수로 래핑 됨)를 통해 AJAX 및 POST 요청을 통해 내 서버로 보내는 텍스트 필드가 있습니다. PHP 쪽에서 나는 json_decode을하고있다.POST의 JSON/PHP에서 앰퍼샌드

모든 것이 작동하지만 앰퍼샌드 (&)를 넣으면 POST 매개 변수가 PHP 쪽에서 불완전 해집니다 (적어도 var_dump($_POST)은 쓰고 있습니다).

toJSON과 json_decode가 모든 작업 (이스케이프 처리)을 수행하지 않아야합니까? encodeURIComponent, & to &, & to \u0026을 시도했지만 작동하지 않습니다.

내가 뭘 잘못하고있어?

AJAX 호출

function execute() { 
    this.setupUrl(); 
    return $.ajax({ 
     type: this.requestMethod, 
     data: this.getDataParams(), 
     url: this.url 
    }); 
} 

function getDataParams() { 
    if(this.data != undefined) { 
     if(this.requestMethod == 'POST' || this.requestMethod == 'PUT') { 
      return "data=" + $.toJSON(this.data); 
     } else if(this.requestMethod == 'GET') { 
      return this.data; 
     } 
    } else { 
     return null; 
    } 
} 
+0

코드를 표시하면 도움이됩니다. – Quentin

+0

'getDataParams()'를'function getDataParams() {return (this.data === undefined)로 변경 하시겠습니까? null : 'data ='+ encodeURIComponent ($. toJSON (this.data)); }'그리고 그것은 작동해야합니다 ... – DaveRandom

답변

2

대답은 간단합니다. 문자열 대신 data에 개체를 사용하십시오.

예. 다음과 같이 함수를 변경하십시오.

return {data: $.toJSON(this.data)}; 

POST 또는 GET을 사용하는 경우에도 상관 없습니다. 당신은 이미에서 실행 가지고

+0

문자열 연결은 모든 악의 뿌리입니다, 다시 : D 감사. 몇 분 안에 받아 들일 것입니다. – svenkapudija

+0

: {data : {data : json}}을 가지므로이 방법은 작동하지 않습니다. 내 대답을 참조하십시오 – Gavriel

+0

그는 그가 원하는 것에 따라 다릅니다. 그러나 순수 JSON 페이로드, 즉'data : JSON.stringify (this.data)'를 보내고 PHP 코드에서'json_decode (file_get_contents ("php : // input"))'를 사용하는 것을 고려해야합니다. – ThiefMaster

3

&%26로서 부호화되어야한다. 그렇게하는 것을 찾아라.

0

당신은

if(this.requestMethod == 'POST' || this.requestMethod == 'PUT') { 
       return $.toJSON(this.data); 
      } 
0

이 이상한입니다) ("데이터"일이 필요하지 않습니다. PHP와 JS는 많은 yaers를 함께 사용합니다. PHP는 js가 코딩 한 것을 디코딩 할 수 없다고 기대할 수 없습니다. 그래서 이것을 처리 할 특별한 함수가 필요합니다.

function damn_ampersand(str){ 
    return str.replace('&', '%26'); 
} 
obj = {"ololo": damn_ampersand("atata & foobar")} 
json = JSON.stringify(obj);