2011-06-24 140 views
5

我想發送簡單的數據到theservre,我需要一個「粗糙和準備」的方式來做到這一點。發送JSON到服務器,使用jQuery

這是我到目前爲止有:

var emails = ['[email protected]', '[email protected]', '[email protected]']; 

var ruff_json = "{ 'emails': ["; 
for (i in emails) 
    ruff_json += ((i == 0) ? '' : ', ') + '\''+emails[i]+'\''; 

ruff_json += '] }'; 

jQuery.ajax({ 
    type: 'POST', 
    url: '1.php', 
    data: ruff_json, 
    dataType: "json", 
    timeout: 2000, 
    success: function(result){ 
     //do something 
    }, 
    error: function (xhr, ajaxOptions, thrownError){ 
     //do something 
    } 
}); 

用Firebug,我可以看到數據被髮送到服務器 - 然而,在服務器上,沒有數據($ _ POST爲空) - 我究竟做錯了什麼?

+2

您應該使用JSON編碼庫而不是滾動自己的。試試:https://code.google.com/p/jquery-json/ – limscoder

回答

7

我們發佈我們的所有數據,使用JSON。

var myobj = { this: 'that' }; 
$.ajax({ 
    url: "my.php", 
    data: JSON.stringify(myobj), 
    processData: false, 
    dataType: "json", 
    success:function(a) { }, 
    error:function() {} 
}); 

然後在PHP中,我們做

<?php 
    $json = json_decode(file_get_contents("php://input"), true); 
    // Access your $json['this'] 
    // then when you are done 
    header("Content-type: application/json"); 
    print json_encode(array(
    "passed" => "back" 
)); 
?> 

這種方式,我們甚至不亂用POST變量,而在一般情況下,它比擁有jQuery的過程中他們更快。

+0

最後,它是使用jSONLint,jQuery-json和直接從php://輸入中讀取的幫助我解決此問題的組合。我最大的震驚是發現即使數據是以JSON形式發佈的,它也沒有出現在$ _POST中。我只選擇了這個答案,因爲它有很多有效的分數,Jeremy花時間提供了一些代碼來證明他的意思。 – oompahloompah

+0

這是因爲發佈的json不是php期望填充$ _POST的格式。它更類似於發佈文件,但它不會出現在$ _FILES中 – Rahly

0

PHP通過解析接收到的數據來填充$_POST。但是,它只知道表單編碼的數據,JSON數據不能自動分析。所以$_POST在這種情況下將是無用的。你需要get the raw post data並用json_decode解析它。

2

您的數據字段應包含具有鍵值對的對象,因爲它將被編碼爲POST鍵值對。

data = {my_json: encoded_string}; 

然後在PHP端可以訪問數據爲:

$data = json_decode($_POST['my_json']);