2013-07-29 185 views
0

我要發佈以下數據:JSON POST請求 - JSON數據,如何做數據POST請求以JSON格式

{ 
    "contactsync": 
     { "rev":4, 
     "contacts":[ 
        { "fields": [ 
           { 
            "value": 
             { 
             "givenName":"dfgheeej", 
             "familyName":"ffftestfff" 
             }, 
            "type":"name", 
            "flags":[], 
            "op":"add" 
           }, 
           { 
            "value":"fffffff", 
            "type":"nickname", 
            "flags":[], 
            "op":"add" 
           }, 
           { 
            "value":"[email protected]", 
            "type":"email", 
            "flags":[], 
            "op":"add" 
           } 
          ], 
        "categories":[], 
        "op":"add" 
        } 
     } 
} 

到URL。 (如:site.com/anything/add?format=json & wssid = t4764.444 & wssid = SOME_VALUE & WINDOWID = & R = 776566756)

我如何使用上面的數據可能通過JavaScript來一個網址? (我想創建包含腳本來完成它的HTML文件)。

這一切都不會在同一服務器上發生的,我想從其他服務器到另一個數據發佈。

+0

@HeinA.Grønnestad:我試圖XMLHttpRequest的方式做到這一點和正常的表單提交方法..但沒有工作! – Lady

+0

我使用json在php和javascript之間玩弄了一下,但接着是其他方式。我認爲這可能是一個挑剔的挑剔。無論如何,你是否嘗試過在整個Json結構中放置雙引號並轉義其他雙quatation標記,然後在php中再次解碼json? –

+0

現代瀏覽器實現['JSON.stringify()'](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/JSON/stringify),它可以讓你獲得一個字符串代表你的對象,但是你不知道從架構的角度來看,使用這種方法是最好的解決方案。 – MasterAM

回答

0

您可以使用Ajax,如果你的腳本將是相同的服務器,該服務器支持CORS或服務器支持JSONP上。使用jQuery這將是:

var data = {"contactsync":{"rev":4,"contacts":[{"fields":[{"value":{"givenName":"dfgheeej","familyName":"ffftestfff"},"type":"name","flags":[],"op":"add"},{"value":"fffffff","type":"nickname","flags":[],"op":"add"},{"value":"[email protected]","type":"email","flags":[],"op":"add"}],"categories":[],"op":"add"}]}}; 
var url = 'site.com/anything/addformat=json&wssid=t4764.444&wssid=some_value&windowid=&r=776566756'; 

$.post(url, JSON.stringify(data), function(response) { 

}); 

,如果你不能用ajax,你需要創建一個PHP代理(只是通過JSON的遠程地址和打印響應),如:

function post($url, $data) { 
    $ch = curl_init($url); 
    curl_setopt($ch, CURLOPT_POST, 1); 
    curl_setopt($ch, CURLOPT_POSTFIELDS, $data); 
    curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1); 
    curl_setopt($ch, CURLOPT_HEADER, 0); 
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); 
    return curl_exec($ch); 
} 

function get_raw_post_data() { 
    if (isset($GLOBALS['HTTP_RAW_POST_DATA'])) { 
     return $GLOBALS['HTTP_RAW_POST_DATA']; 
    } else { 
     return file_get_contents('php://input'); 
    } 
} 

$url = "site.com/anything/addformat=json&wssid=t4764.444&wssid=some_value&windowid=&r=776566756"; 

echo post($url, get_raw_post_data()); 

然後在同一臺服務器上使用腳本的遠程站點的url的內部。

+0

我想在其他遠​​程服務器(不是同一臺服務器)上發佈數據。 – Lady

+0

@Lady然後使用我寫的這個php代理。 – jcubic