2011-02-03 24 views
1

我已經看過掙扎在這個論壇上很多職位和仍然有問題,不能讓我的頭一輪吧。與json_decode

$.ajax({ 
    url: myUrl, 
    data: sendData, 
    type: "POST", 
    error: function(xhr, statusText, errorThrown){ 
    // Work out what the error was and display the appropriate message 
    }, 
    success: function(data){ 
    // data retrived ok 
    var myData = data; 
     // do something with data 
    } 
}); 

的json是這樣(與JS生成):使用Firebug

{"borough": {"id": "3"}, "cat":{"id": "5", "id": "47", "id": "98"}} 

我已經hecked和

我公司通過AJAX這是張貼JSON對象retreiving一個PHP頁面它得到跨

我的問題是與PHP的已經過去了,我不能似乎得到json_decoded數據。

<?php 
    $catPost = $_POST['cat']; 
    echo($catPost); 
    $catData = json_decode($catPost, true); 
    var_dump($catData); 
?> 

echo語句打印出的翻譯:

但後續代碼var_dump打印出空

我到底做錯了什麼?我如何訪問數據中的diffirent「id」值?

任何幫助非常感謝。

測試頁可以在http://http://www.reelfilmlocations.co.uk/NEW Search/fullsearch_jq.php

測試說明書中可以看出: (使用thetext「高級搜索」選擇類別下拉菜單下進行Ajax調用 還需要選擇一個行政區和somecategories topopulate JSON對象與一些數據

編輯:

的JSON由下述腳本,從數組中讀出選擇的每日新聞的值來創建:

var sendData = {"borough":[], "cat":[]}; 
//alert('borough tagger add '+BoroughTagger.myIdArray[intIndex]); 
sendData.borough.push({"id":BoroughTagger.myIdArray[intIndex]}); 
$.each(CatTagger.myIdArray, function(intIndex, objValue) { 
    alert('cat Tagger add '+CatTagger.myIdArray[intIndex]); 
    sendData.cat.push({"id":CatTagger.myIdArray[intIndex]}); 
}); 

這將創建像下面這樣的JSON對象:(在fiebug選中此)

{"borough": {"id": "3"}, "cat":{"id": "5", "id": "47", "id": "98"}} 

我現在用stringData = JSON.stringify(sendData)通過AJAX 發送數據,但有dosent似乎在任何名稱交的集合,該字符串是有,但如果我它使用$myData = $_POST;其中回聲「ArrayArray」 與json_decode錯誤引用:警告:json_decode()預計參數1是串,陣列中的d給出:\瓦帕\ WWW \ ReelFilm \ NEW搜索\ getAdvSearch.php線路7

讓我怎麼讓Ajax調用分配tothe發送SATA的名稱,所以我可以使用$_POST['myData']

+0

是否複製粘貼? {「id」,「3」}它應該是{「id」:「3」} - 冒號不是昏迷:)也許這就是問題所在? – 2011-02-03 14:48:55

+0

你把它編碼爲一個字符串,或直接發送的JSON對象在javascript中? – 2011-02-03 14:51:27

+0

@湯姆恩,實際上是由一個腳本,我輸入,最多產生的JSON,使用:willchange的問題,以反映 – 2011-02-03 15:02:36

回答

1

我已經找到了解決問題的方法訪問它。嘗試這個。

這可能是,當你正在使用jQuery,他們可能以不同的方式貼吧引起PHP將其識別爲一個對象。我知道你已經在json_decode()中完成了它,但echo()輸出只將變量識別爲一個對象,因此你需要強制PHP將它改變爲數組。

<?php 
    $catPost = (array) $_POST['cat']; /* PHP may post it as an object, this converts to array, which you'll need to find the data from */ 
    echo($catPost); 
    $catData = json_decode($catPost, true); 
    var_dump($catData); 
?> 

如果不工作,BASE64_ENCODE jQuery的阿賈克斯()它推到你的服務器之前的數據。你可以在phpjs找到一個base64_encode函數。org phpjs.org,並簡單地編碼你的字符串,然後使用PHP base64_decode()解碼輸出,然後json_encode()。

希望它有幫助!

2

如果json_decode()爲您提供了一個空,使用json_last_error(),試圖找出失敗的原因。

1

嘗試增加此選項可將AJAX調用:

traditional:false 

看起來莫名其妙ajaxSetup的傳統選項設置爲true(如果是這樣,這裏就遞歸系列化轉嫁對象完成)