2012-06-03 61 views
4

我有一個通過JSON和jQuery(包裝在.toJSON函數中)通過AJAX和POST請求發送到我的服務器的文本字段。在PHP方面,我在做json_decodeJSON/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而不是字符串。

E.g.改變你的功能是這樣的:

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

這將在任何情況下工作,不管你使用POST或GET。

+0

字符串串聯是所有邪惡的根源,再次:D謝謝。將在幾分鐘內接受。 – svenkapudija

+0

這不起作用,因爲它會有:{data:{data:json}}。看到我的回答 – Gavriel

+0

這取決於他想要什麼。但是,您應該考慮在PHP代碼中發送純JSON負載,即'data:JSON.stringify(this.data)'並使用'json_decode(file_get_contents(「php:// input」))''。 – ThiefMaster

3

&應該被編碼爲%26。找到這樣做的事情。

0

你並不需要的「數據」的事情,因爲你已經擁有了它的execute()

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

這是奇怪的。 PHP和JS一起工作很多次。不能指望PHP不能解碼什麼js編碼。所以我需要一個特殊的功能來處理這個問題。

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