2011-11-27 29 views
5

Tôi có một kịch bản AJAX mà gửi dữ liệu trong một file PHP của tôi:Tại sao tôi không thể tải Dữ liệu JSON của mình bằng AJAX trong tệp PHP?

 var _lname = $('#ptLastName').val(); 
    var _fname = $('#ptFirstName').val(); 
    var _mname = $('#ptMiddleName').val(); 
$.ajax({ 
       type: "POST", 
       url: ".././CheckPerson.php", 
       data: "{'lastName':'" + _lname + "','firstName':'" + _fname + "','middleName':'" + _mname + "'}", 
       contentType: "application/json; charset=utf-8", 
       dataType: "json", 
       success: function (response) { 
        var res = response.d; 
        if (res == true) { 
         jAlert('Person Name already exists!', 'Error'); 
         return; 
        } 

Nó hoạt động tốt và tôi có thể nhìn thấy dữ liệu JSON đăng trong Firebug console. Vấn đề là với mã PHP này:

$firstname = json_decode($_POST['firstName']); 
$lastname = json_decode($_POST['lastName']); 
$middlename = json_decode($_POST['middleName']); 
$response = array(); 

Các mã PHP ở trên dường như nó không thể nhận ra 'firstName', 'lastName', và 'middleName' như một tham số JSON được đăng, và trả về một cái gì đó Undefined index: firstName in C:... như thế cho tất cả các đăng tải thông số.

Tôi cũng đã thử sử dụng $data = $_POST['data']$_REQUEST['data'] để nhận tất cả tham số JSON và giải mã bằng cách sử dụng json_decode($data); nhưng không hoạt động.

Tôi cũng đã sử dụng mã rút ngắn AJAX cho bài $.post('.././CheckPerson.php', {data: dataString}, function(res){ });, nó hoạt động tuyệt vời với file PHP của tôi và bây giờ file PHP của tôi có thể đọc lastName, firstName, và middleName, nhưng tôi nghĩ rằng nó không phải là một dữ liệu JSON nhưng chỉ có một là dữ liệu văn bản vì firebug không thể đọc dữ liệu đó dưới dạng dữ liệu JSON. Bây giờ, tôi đang nhầm lẫn như thế nào sẽ tập tin PHP của tôi đọc các tham số dữ liệu JSON. Các bạn có bất cứ đề nghị về điều này?

Trả lời

7

Vấn đề là dataType: "json" không có nghĩa là bạn đăng json, nhưng bạn đang mong nhận dữ liệu json từ máy chủ do yêu cầu của bạn. Bạn có thể thay đổi dữ liệu bài viết của bạn để:

data: {myPostData : "{'lastName':'" + _lname + "','firstName':'" + _fname + "','middleName':'" + _mname + "'}"} 

và sau đó phân tích nó trên máy chủ của bạn như

$myPostData = json_decode($_POST['myPostData']); 
$firstname = $myPostData["firstName"]; 
$lastname = $myPostData["lastName"]; 
$middlename = $myPostData["middleName"]; 
2

Một vấn đề - bạn đang sử dụng dấu nháy đơn cho json của mình. Bạn nên sử dụng dấu ngoặc kép (theo spec).

{"lastName":"Smith", "firstName":"Joe"} 

instead of 

{'lastName':'Smith', 'firstName':'Joe'} 
Các vấn đề liên quan