2014-02-25 52 views
0

我們有一個名爲創建接收JSON格式的以下數據的API方法如何以部分url參數,部分json對象的形式呈現數據?

{data: 
     { 
     "token":"73264280-be3f-4f5b", 
     "BuildingDisplay":"Fire Station 21 Fairburn - 19 East Broad St.", 
     "CallerEmail":"[email protected]", 
     "CallerFax":"", 
     "CallerFirstName":"Jim", 
     "CallerLastName":"Parker", 
     "CallerMiddleInitial":"", 
     "CallerOtherPhone":"", 
     "CallerState":"", 
     "CallerWorkPhone":"918-354-2874"}} 

可有人請說明如何獲得API接收的格式如下數據:

http://folder/users/Create?data={"BuildingDisplay":"Fire Station 21 Fairburn - 19 East Broad St.", 
     "CallerEmail":"[email protected]", 
     "CallerFax":"", 
     "CallerFirstName":"Jim", 
     "CallerLastName":"Parker", 
     "CallerMiddleInitial":"", 
     "CallerOtherPhone":"", 
     "CallerState":"", 
     "CallerWorkPhone":"918-354-2874"}&token=73264280-be3f-4f5b 

非常感謝提前。

$.ajax({ 
type: "POST", 
url: "proxyCheck.php", 
data: '{data: ' + JSON.stringify(myData) + '}', 
contentType: "application/json;charset=utf-8", 
dataType: "json", 
async: false, 
success: function (response) { 
alert("Record has been added successfully."); 
window.location.reload(); 
} 
}); 
    return false; 
} 

//然後proxyCheck.php:

<?php 

//DESCRIPTION: Allow Ajax scripts to request content from a web service they otherwise may not be able to. 

$ch = curl_init("http://Users/Services/Create"); 
    curl_setopt($ch, CURLOPT_HEADER, 0); 
    curl_setopt($ch, CURLOPT_POST, 1); 
    curl_setopt ($ch, CURLOPT_POSTFIELDS, $_POST); 
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); 
    $output = curl_exec($ch); 
    curl_close($ch); 
    echo $output 
    ?> 
+0

爲什麼不在HTTP POST正文中獲取JSON數據參數?爲什麼你需要HTTP GET呢? –

+0

@AlexP,我以爲我使用POST方法? –

+0

所以你的問題是如何提交這個數據與'jquery'與跨域請求?當你在URL中寫這個JSON數據時,你實際上正在通過GET提交它。使用'jsonp',您可以使用GET,而不會造成太多頭痛。對於POST,您需要使服務器支持CORS。 –

回答

0

我認爲這將這樣的伎倆:

$.ajax({ 
    type: "POST", 
    url: "proxyCheck.php", 
    data: {data: JSON.stringify(myData)}, 
    contentType: "application/json;charset=utf-8", 
    dataType: "json", 
    async: false, 
    success: function (response) { 
    alert("Record has been added successfully."); 
    window.location.reload(); 
    } 
}); 

編輯: 要澄清一下,如果你想在URL中的參數你需要使用type: "GET"。 對於JSON,您將該值串化,但您希望ajax data參數像往常一樣是一個對象。 jQuery將遍歷data中的所有密鑰並將它們追加到查詢字符串中。

請注意,您可以打包到查詢字符串中的數據量有一些上限,儘管我認爲您已經在適用於現代瀏覽器的數據範圍內了。

第二編輯:代理使用POST,所以它必須是POST。

+0

不幸的是,它不起作用。這是您的解決方案顯示的內容: 'proxyCheck.php?{data:%20 {%22Token%22:%226f44bba1-69ab-4c92-93e5-537fff732548%22,%。 首先,這不是JSON格式。其次,它需要將這些值傳遞給Create方法,以便Create方法以下列格式接收數據: 'Create?data = {「name」:「john doe」,etc}&token = aaaaaaa' –

+0

道歉,我相信我誤解了重定向的各個層面。你用查詢字符串(GET)顯示一個URL,但你似乎都參考POST兩次。您的代理是否期待POST? –

+0

我的proxyCheck.php代碼張貼在上面。 –