2011-02-14 33 views
5

Tôi muốn chuyển các giá trị chính vào trang php.json xâu chuỗi thành php

Ở trang php, tôi sẽ bắt đầu đọc giá trị bằng cách khớp với ajaxcallid.

Nhưng nó không hoạt động.

Nó phải thực hiện với cú pháp/cách mà tôi chuyển vào gây ra lỗi.

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

hãy đổ '$ phparr' bạn ngay trước khi mã hóa như JSON và dán đầu ra. – BoltClock

Trả lời

0

Tôi chưa từng làm việc với PHP nhưng từ kinh nghiệm của tôi với ASP.net sau đây có thể giúp bạn.

Thêm contentType chìa khóa để settigns ajax:

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

cũng tôi nghĩ rằng bạn cần phải toàn bộ stringify giá trị mà bạn đang gán cho data như thế này:

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

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


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

tôi sẽ tham gia một dự đoán và nói rằng bạn KHÔNG nên xâu chuỗi mọi thứ. Tôi tin rằng JQuery sẽ làm điều đó cho bạn. Cụ thể, không có ai = JSON.stringify (người). Hãy thử một lần.

+1

hoàn toàn đồng ý. tại sao bạn sẽ đóng gói các tham số được xâu chuỗi trong một đối tượng và sau đó gửi chúng thông qua ajax, khi jquery chuyển một đối tượng của các tham số. –

+1

max_input_vars trong PHP 5.3.9. giới hạn đầu vào vars 1000 nếu bạn có tập tin json lớn sau đó nó có thể cung cấp cho bạn cảnh báo PHP. – tiltdown

3

Đây là những gì $.ajax cuộc gọi của bạn và PHP bên sẽ giống như thế:

JQuery

$.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

này đã giúp tôi:

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

trong mã php của bạn để truy cập hồ sơ

Hy vọng nó sẽ giúp ai đó!

16

Nếu bạn không sử dụng datatype: 'json', bạn có thể cần phải làm stripslashes

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

Và trong php:

$posts = json_decode(stripslashes($_POST['posts'])); 
Các vấn đề liên quan