2012-02-01 33 views
27

Tôi đang gửi yêu cầu ajax với 2 giá trị bài đăng, đầu tiên là "hành động" xác định hành động của tập lệnh php của tôi, phân tích cú pháp "id" là id của người dùng để phân tích cú pháp .
Máy chủ trả về 6 giá trị bên trong một mảng() và sau đó được mã hóa để JSON với chức năng PHP: json_encode();
Một số phản ứng của tôi là HTML, nhưng khi tôi mã hóa nó để JSON, nó thoát "/" để nó trở thành "\/"
Tôi làm cách nào để tắt tính năng này?

cũng khi tôi không biết cách hiển thị điều này trong jQuery khi tôi nhận được phản hồi của máy chủ, tôi chỉ nghĩ rằng đặt tất cả vào một div sẽ chỉ hiển thị số và mã HTML mà tôi đã yêu cầu, nhưng nó sẽ hiển thị mảng vì nó được mã hóa trong PHP.Yêu cầu ajax jQuery với phản hồi json, làm thế nào?

PHP

$response = array(); 
$response[] = "<a href=''>link</a>"; 
$response[] = 1; 
echo json_encode($response); 

jQuery:

$.ajax({ 
    type: "POST", 
    dataType: "json", 
    url: "main.php", 
    data: "action=loadall&id=" + id, 
    complete: function(data) { 
     $('#main').html(data.responseText); 
    } 
}); 

làm thế nào để tôi làm điều này để JSON làm việc?

+0

Bạn có thể cũng đổ phản ứng JSON của bạn để có được một ý tưởng tốt hơn về vấn đề này? Bạn không chắc chắn ý của mình là "/" sao cho nó trở thành "/" – Sid

+0

bạn đã thử http://api.jquery.com/jQuery.getJSON/ chưa? –

+0

xin lỗi sid tôi đã thực hiện một dấu gạch chéo ngược nhưng nó kinda biến mất :) nhưng mỗi slash bình thường được một dấu gạch chéo ngược trước khi nó "backslash" + "bình thường slash" ka_lin: tôi nhìn vào nó, nhưng tôi didnt hiểu nó, và nếu tôi đã làm, làm thế nào tôi gửi một số dữ liệu bài đăng với yêu cầu? – Flaashing

Trả lời

38

Bạn cần phải gọi

$.parseJSON(); 

Ví dụ:

... 
success: function(data){ 
     var json = $.parseJSON(data); // create an object with the key of the array 
     alert(json.html); // where html is the key of array that you want, $response['html'] = "<a>something..</a>"; 
    }, 
    error: function(data){ 
     var json = $.parseJSON(data); 
     alert(json.error); 
    } ... 

thấy điều này trong http://api.jquery.com/jQuery.parseJSON/

nếu bạn vẫn còn có vấn đề về dấu gạch chéo: tìm kiếm security.magicquotes.disabling.php hay: function.stripslashes.php

Lưu ý:

Câu trả lời này ở đây là đối với những người hãy thử sử dụng $.ajax với thuộc tính dataType được đặt thành json và thậm chí là có loại phản hồi sai. Việc xác định header('Content-type: application/json'); trong máy chủ có thể khắc phục sự cố, nhưng nếu bạn đang trả lại text/html hoặc bất kỳ loại nào khác, phương pháp $.ajax sẽ chuyển đổi nó thành json. Tôi thực hiện một thử nghiệm với các phiên bản cũ hơn của jQuery và chỉ sau khi phiên bản 1.4.4 lực $.ajax chuyển đổi bất kỳ loại nội dung nào thành số dataType được chuyển. Vì vậy, nếu bạn có vấn đề này, hãy thử cập nhật phiên bản jQuery của bạn.

+0

nó trả về lỗi: thiếu) sau danh sách đối số "alert (data.0);" – Flaashing

+0

vâng, đó là một ví dụ. Bạn phải định nghĩa mảng của mình bằng một khóa có thể được chuyển đổi thành một đối tượng, bởi vì các số có thể. như $ response ['html'] = "một cái gì đó"; hơn bạn gọi nó bằng cách sử dụng parseJSON json.html (như ví dụ trên). – Guilherme

+0

oh yeah nó hoạt động! đơn giản vì đó là những gì tôi muốn :) cảm ơn bạn! – Flaashing

23

Thứ nhất, nó sẽ giúp đỡ nếu bạn thiết lập các tiêu đề của PHP của bạn để phục vụ JSON:

header('Content-type: application/json'); 

Thứ hai, nó sẽ giúp điều chỉnh cuộc gọi ajax của bạn:

$.ajax({ 
    url: "main.php", 
    type: "POST", 
    dataType: "json", 
    data: {"action": "loadall", "id": id}, 
    success: function(data){ 
     console.log(data); 
    }, 
    error: function(error){ 
     console.log("Error:"); 
     console.log(error); 
    } 
}); 

Nếu thành công, phản hồi bạn nhận được nên được chọn là JSON đúng và một đối tượng phải được ghi vào bàn điều khiển. LƯU Ý: Nếu bạn muốn nhận html thuần túy, bạn có thể muốn xem xét sử dụng một phương pháp khác để JSON, nhưng cá nhân tôi khuyên bạn nên sử dụng JSON và hiển thị nó thành html bằng cách sử dụng các mẫu (chẳng hạn như Handlebars js).

+0

tôi đã thử ví dụ của bạn, trong bảng điều khiển firebug của tôi, tôi nhận được phản hồi: missing} sau danh sách thuộc tính "sucess: function (data) {" vâng, bạn đã bỏ lỡ hôn mê sau khi thiết lập dữ liệu. nhưng bây giờ nó cho tôi một phản ứng được mã hóa trong json trong firebug – Flaashing

+0

Tôi đã có một lỗi cú pháp - "thành công" nên được "thành công", và tôi bị mất một dấu phẩy. Bạn sẽ có thể khám phá câu trả lời ngay bây giờ và xuất các phần của nó vào DOM. – sgb

+0

có về điều đó, làm thế nào để u chia mảng thành 6 bit trong jquery và xuất chúng trong 6 yếu tố khác nhau? – Flaashing

1

Vì bạn đang tạo đánh dấu dưới dạng chuỗi mà bạn không chuyển đổi thành json. Chỉ cần gửi nó vì nó kết hợp tất cả các phần tử mảng sử dụng phương thức implode. Thử cái này.

thay đổi PHP

$response = array(); 
$response[] = "<a href=''>link</a>"; 
$response[] = 1; 
echo implode("", $response);//<-----Combine array items into single string 

JS (Thay đổi datatype từ json để html hay chỉ không đặt nó jQuery sẽ tìm nó ra)

$.ajax({ 
    type: "POST", 
    dataType: "html", 
    url: "main.php", 
    data: "action=loadall&id=" + id, 
    success: function(response){ 
     $('#main').html(response); 
    } 
}); 
+0

@Flaashing - Bạn đã thử cái này chưa? – ShankarSangoli

+0

không vì tôi muốn mỗi giá trị trong 6 giá trị được hiển thị trong 6 phần tử khác nhau :) – Flaashing

2

Kết nối bộ điều khiển khách hàng javascript của bạn và bộ điều khiển máy chủ php bằng cách gửi và nhận mã opcodes với dữ liệu được liên kết. Vì vậy, mã php của bạn có thể gửi câu trả lời như đồng bằng chức năng cho js recepient/nghe

thấy https://github.com/ArtNazarov/LazyJs

Xin lỗi cho tiếng Anh xấu của tôi

Các vấn đề liên quan