2011-02-14 10 views
5

私はPHPのページにキー値を渡したいと思います。json stringify to PHP

PHPページでは、ajaxcallidと一致させることで値を読み始めます。

しかし、動作しません。

私はエラーを引き起こしている構文/方法で行う必要があります。

parse error 
invalid json: ajax call id is missing  

のJavaScript/AJAX:

var person = { 
    "Address" : "123 Anywhere St.", 
    "City"  : "Springfield", 
    "PostalCode" : 99999 
}; 

alert(person);   

person= JSON.stringify(person); 

alert(person); 

$.ajax({ 
    url: 'ROOT_URL/admin/ajaxtest.php', 
    type: "POST", 
    dataType: 'json', 
    data: {ajaxcallid: '26', jsarr: person}, 
    timeout: 5000, 
    success: function(output) { 
     alert(output.Address); 
    }, 
}); 

PHP:

<?php 
if (isset($_REQUEST['ajaxcallid'])) 
{  
    if($_REQUEST['ajaxcallid']==26) 
    {  
     //example, I want to read value of person.Address, person.City, 
     //person.PostalCode 
    //what is the easiest way 
     $phparr= json_decode($_REQUEST['jsarr']); 
     //do all other operation 
     $output= json_encode($phparr); 
    } 
} 
else 
{ 
    $output= "ajax call id is missing"; 
} 
echo $output; 
?> 
+0

ちょうどJSONとしてエンコードする前に、あなたの '$のphparr'をダンプしてください。出力を貼り付けます。 – BoltClock

答えて

0

私はあなたを助けることがあり、次のPHPではなくASP.netとの私の経験から働いていません。

アヤックスsettignsにcontentTypeキーを追加します:私は推測を取るつもりです

var person = { 
    "Address" : "123 Anywhere St.", 
    "City"  : "Springfield", 
    "PostalCode" : 99999 
}; 

var d= {ajaxcallid: '26', jsarr: person}; 
var dat=JSON.stringify(d); 


...... 
data: dat, 
...... 
5

:また

type: "POST", 
contentType:'application/json', 
dataType: 'json', 

私はあなたがこのようdataに割り当てるstringify全体の値に必要だと思いますあなたは何かをひも化してはならないと言います。私はJQueryがあなたのためにそれを行うと信じています。すなわち、person = JSON.stringify(person)はありません。試してみてください。

+1

は絶対に同意します。なぜjqueryがパラメータのOBJECTを渡すときに、文字列化されたパラメータをオブジェクトにカプセル化して、それをajaxを通して送信しますか? PHP 5.3.9のmax_input_vars –

+1

あなたが巨大なjsonファイルを持っているならば、それはあなたにPHP警告を与えることができます1000に入力値を制限します。 – tiltdown

3

これはあなたの$.ajaxコールとPHP側がどのように見えるかです:これは私を助け

$.ajax({ 
    url: "/admin/ajaxtest.php", 
    method: "POST", 
    data: { 
     ajaxcallid: "26", 
     person: JSON.stringify({ 
      "Address" : "123 Anywhere St.", 
      "City" : "Springfield", 
      "PostalCode" : "99999" 
     }) 
    } 
}).done(function(data) { 
    if (!data) { 
     // generic error message here 
    } else if (data == 'invalid') { 
     alert('no ajaxcallid received'); 
    } else { 
     var result = $.parseJSON(data); // if you pass back the object 
     alert(result.Address); 
    } 
}); 

PHP

if (isset($_REQUEST['ajaxcallid'])) { 
    if ((int) $_REQUEST['ajaxcallid'] == 26) { 
     $personData = json_decode($_REQUEST['person']); 
     $address = $personData->Address; 
     $postalCode = $personData->PostalCode; 
     $returnData = json_encode($personData); 
     echo $personData; 
     die(); 
    } 
} else { 
    echo 'invalid'; 
    die(); 
} 
6

jQueryの

記録

にアクセスするためのPHPコードで

data = json_decode($this->request->data['jsarr'], true); 

は、それが誰かを助けることを願っています!

16

あなたがデータ型を使用していない場合: 'JSON' を、あなたがにstripslashes

$.post(window.data.baseUrl, {posts : JSON.stringify(posts)}); 

とPHPでの操作を行うために必要がある場合があります。

$posts = json_decode(stripslashes($_POST['posts']));