2013-12-14 64 views
0

我有以下的 '字符串化' JSON數據:JSON數據未發送

$jsonData = '[{"tnum":"1","tnam":"Title1","snum":"24","word1":"this","word2":"is fun"},{"tnum":"343","tnam":"Title2","snum":"233","word1":"hello","word2:"again"}]' 

我的AJAX是:

$.ajax({ 
    url: "doSave3.php", 
    type: "POST", 
    data: jsonData, 
    contentType: 'application/json; charset=UTF-8', 
    success: function() { 
     alert("Data saved"); 
    }, 
    error: function() { 
     alert("Data were not saved"); 
    } 
}); 

和服務器端的PHP是:

if(isset($_POST['data'])){ 
    $jsonData = $_POST['data']; 

    $result = json_decode($jsonData); 

    foreach ($result as $key => $value) { 
     if ($value) { 
      $sql = "INSERT INTO saved_lists (id, title_number, title_name, sub_number, word1, word2) VALUES (NULL, $value->tnum, '$value->tnam', $value->snum, '$value->word1', '$value->word2')"; 
      mysql_query($sql); 
     } 
    } 
} 

我已經測試過PHP,並且它在我手動設置$ doSave3.php中的$ jsonData的時候有效。注意在做這個測試的時候,我還必須刪除if(isset($ _ POST ['data'])或者它不會超過if語句,當我恢復依賴$ _POST ['data']時,沒有行動,所以我敢肯定doSave3.php沒有收到POST數據。

一些幫助,將不勝感激。我已經在所有類似的帖子和糾正了一些東西,但沒有骰子尚未。

+0

你應該使用類似'的print_r($ _ POST)'在你的PHP文件的頂部,看看到底有什麼是發送。 –

+0

好的,我已經添加了這個,但我在哪裏可以看到日誌?這是一件讓我無法自己做進一步調試的事情,因爲我不知道如何看到這個值,因爲它是一個AJAX調用。 – riverrunner

+0

它將在服務器響應中返回。您可以使用Firebug或Chrome開發者控制檯等功能查看服務器的原始響應。 –

回答

0

啊...問題是你的JSON字符串。你缺少的字符串"word2:"again"結束一個雙引號,這應該是"word":"again"

var jsonData = '[{"tnum":"1","tnam":"Title1","snum":"24","word1":"this","word2":"is fun"},{"tnum":"343","tnam":"Title2","snum":"233","word1":"hello","word2":"again"}]'; 
$.ajax({ 
    url: "echo.php", 
    type: "POST", 
    data: 'data='+jsonData, 
    success: function(data) { 
    alert(data); 
    }, 
    error: function() { 
    alert("Data were not saved"); 
    } 
}); 
}); 

和echo.php

$json = urldecode($_POST['data']); 
var_dump(json_decode($json)); 

,一切工作正常與雙引號。:)

+0

謝謝你,在我的測試中,我使用了一個稍微不同的JSON字符串,它在所有正確的位置都有引號。你之前的評論確實解決了我的問題。 – riverrunner