2012-10-26 55 views
2

我有一個JavaScript對象,我想在使用jQuery的ajax實現時傳遞給PHP文件。如何在使用ajax時將JavaScript對象傳遞給PHP文件

我試圖直接傳遞給它,但這不起作用,因爲它沒有被轉義或任何東西。我試過使用JSON.stringify,但這不適用於我。

有沒有辦法'序列化'一個JavaScript對象到POST字符串?

更新,我再次使用JSON.stringify()。其結果是:

JSON.stringify的()的結果是:

{\"label\":\"Borne, Overijssel, Nederland\",\"value\":\"Borne, Overijssel, Nederland\",\"geocode\":{\"address_components\":[{\"long_name\":\"Borne\",\"short_name\":\"Borne\",\"types\":[\"locality\",\"political\"]},{\"long_name\":\"Borne\",\"short_name\":\"Borne\",\"types\":[\"administrative_area_level_2\",\"political\"]},{\"long_name\":\"Overijssel\",\"short_name\":\"OV\",\"types\":[\"administrative_area_level_1\",\"political\"]},{\"long_name\":\"Nederland\",\"short_name\":\"NL\",\"types\":[\"country\",\"political\"]}],\"formatted_address\":\"Borne, Nederland\",\"geometry\":{\"bounds\":{\"ca\":{\"b\":52.2832527,\"f\":52.3151634},\"ea\":{\"b\":6.688658900000064,\"f\":6.801415300000031}},\"location\":{\"Ya\":52.3002366,\"Za\":6.753725799999984},\"location_type\":\"APPROXIMATE\",\"viewport\":{\"ca\":{\"b\":52.2832527,\"f\":52.3151634},\"ea\":{\"b\":6.688658900000064,\"f\":6.801415300000031}}},\"types\":[\"locality\",\"political\"]}} 

當我做了json_decode它的結果爲NULL。有什麼建議麼?

+0

你能夠提供什麼樣的例子你在做什麼?你的代碼在這裏,也許是一個jsfiddle.net的例子? – chris

回答

1

如果您傳遞一個對象作爲legitmate JSON格式的字符串多數民衆贊成,到PHP嘗試的事情PHP端使用

json_decode()。例如

<?php 
    $ojb = json_decode($_POST['my_json_string']); 
?> 

這是什麼會做的是把你的對象到一個數組或對象,這取決於你使用的PHP版本,並在某些情況下,對象將變成與它的多個對象..例如數組:

Array(
    [0] stdClass (
      'key1'=>'val1' 
      'key2'=>'val2' 
      'key3'=>'val3' 
     ) 
) 

我知道上述不是一個很好的表示,但它是一個表示在那裏的行。

之後,PHP端可以使用變量$ojb像任何其他數組/對象。

$something = $ojb[0]->key1; 

編輯 現在我注意到你的字符串。事實上,引號在字符串中被轉義,打破了它的一個JSON對象的事實,你可以做兩件事情之一..或者只是通過你的帖子傳遞對象到PHP中,不需要運行它strigify或..你可以嘗試在PHP端,如果有必要strigfy吧..

$ojb = stripslashes($_POST['my_json_string']); $ojb = json_decode($ojb);

將嘗試從報價中刪除斜槓,把它通過解碼過程之前。

http://php.net/manual/en/function.json-decode.php

+0

其實我認爲我讀了你的問題錯了..這可能不是你尋求的解決方案。 – chris

+0

嗨克里斯,好吧,我在路上。我正在做的是現在工作。但我無法正確json_decode後值。 – Ben

+0

json_decode-call的返回值是NULL。我相信我的字符串是不正確的。 – Ben

0

您可以指定一個原體的POST請求的。原始數據將是JSON.stringify調用的結果,這意味着您應指定合適的Content-Type標題。

$.ajax(url, { 
    type: 'POST', 
    contentType: 'application/json', 
    data: JSON.stringify(data), 
    processData: false // prevent escaping and other processing 
}); 

然後,您可以反序列化對象在PHP這樣的:

$json = file_get_contents('php://input'); 
$data = json_decode($json); 

原始請求主體映射到特殊的路徑php://input

相關問題