2012-12-24 30 views
0

我使用骨幹在我的應用程序解壓縮JSON數據,我嘗試使用骨幹方法.save方法 這裏更新一個JSON文件是網站http://dalydd.com/projects/backbone/backbone.html.save方法試圖在一個PHP文件

這裏是我的js這是工作的罰款

var ModalInfo = Backbone.Model.extend({ 
defaults: { 
    person:'', 
    occupation:'', 
    home:'', 
}, 
url:'sample.php', 
}); 

var developer = new ModalInfo(); 
developer.toJSON(); 
developer.save({person:'madan', occupation:'developer', home:'middtown'}, { 
wait:true, 
success:function(model, response) { 
console.log('Successfully saved!' + model + response); 
}, 
error: function(model, error) { 
console.log(model.toJSON()); 
console.log('error.responseText' +model); 
} 
}); 

這裏是我的sample.php PHP的,我試圖讓json.js的內容進行解碼它與我的新數據添加,然後對其進行解碼並作爲迴應返回

<?php 

$json_data = json_decode(file_get_contents('json.js'), true); 
for ($i = 0, $len = count($json_data); $i < $len; ++$i) { 
     //do the right logic 
} 
file_put_contents('json.js', json_encode($json_data)); 
$final_data = file_get_contents('json.js', json_encode($json_data)); 
echo $final_data; 
echo(var_dump($_POST)); 
?> 

當我嘗試回聲出超級全球后,我得到陣列(0)

我希望有人能幫助我與我的PHP,爲什麼我不能在sample.php時提取任何POST數據我在主幹中使用.save方法 - 當我回應服務器請求方法時,它聲明發布我只想抓取發佈數據並將其寫入文件,然後返回它我是以這種錯誤的方式 - 任何幫助表示讚賞 - 我在這方面一直在絞盡腦汁。我的第一步是找出爲什麼我無法獲得任何後期數據,即使螢火蟲告訴我它是張貼當我加載頁面 - 你也可以檢查

回答

1

你的問題的答案在於,除非你發佈表單編碼數據,超全局的$_POST不會被PHP填充。您需要獲取原始發佈的輸入。你可以是這樣做的:

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

實際上,你可以使用任何的各種PHP文件輸入法在這裏(即fopen/freadfile(在這種情況下無用),等等)。然而,如果你不打算處理大量的JSON輸入,而內存管理變得更爲重要,那麼上述可能會是最容易的。

+0

嘿邁克這是一個巨大的幫助。 php://輸入的意義是什麼?我認爲我以前從未使用過它,但它的工作還有另一個快速問題。目前在我的PHP文件中,我發佈骨幹的數據作爲json解碼,然後我本質上從json.js獲取json並解碼,然後使用array_merge合併它們,然後編碼並使用file_put_contents更新json .js文件!有沒有更簡單的方法來做到這一點?必須有 –

+0

@JamesDaly'php:// input'只是PHP的輸入流包裝器,請參閱以下鏈接以獲取有關PHP中包裝器的更多信息:http:// php .net/manual/en/wrappers.php.php。你的用例實際上是從一個實際的javascript文件中讀取和寫入的,並且除了某種AJAX方法之外,使用它看起來很奇怪。我猜你試圖持久化某些應用程序數據爲JSON格式?爲什麼不在javascript中讀取json.js的內容,然後改變它,但是它在應用程序中被改變,然後通過'save()'調用保存整個結構? –

+0

@JamesDaly我的道歉我只有有限的曝光e到Backbone(我傾向於做更多的服務器來後臺工作),所以我不熟悉如何使用'save'。 –

相關問題