2012-08-30 37 views
5

Tôi chỉ muốn lưu một số JSON (được tạo bằng Javascript) trong một tệp trên máy chủ. Nhưng tôi thậm chí không nhận được nó để làm việc với một chuỗi đơn giản:Lưu dữ liệu vào tệp qua Ajax POST và PHP

HTML File:

<html> 
<head> 
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"> 
<script src="//ajax.googleapis.com/ajax/libs/jquery/1.8.0/jquery.min.js"></script> 
<style> 
#test{ 
padding:20px 50px; 
background:#ccc; 
color:#000; 
} 
</style> 
<script> 
$(function(){ 
$('#test').click(function(){ 
    $.ajax({ 
     url: "page.php", 
     data: {"foo": "bar"}, 
     processData: false, 
     contentType: 'application/json' 
    }); 

}); 
}); 
</script> 
</head> 
<body> 

<div id="test"> 
KLICK 
</div> 
</body> 
</html> 

Và file php là một cái gì đó như thế này:

<?php 
$myFile = "testFile.txt"; 
$fh = fopen($myFile, 'w'); 
fwrite($fh,$_POST['data']); 
fwrite($fh,$_POST['foo']); 
fwrite($fh,$_POST["foo"]); 
fwrite($fh,$_POST[foo]); 
fclose($fh); 

Không có gì làm việc. Tôi cũng đã thử

$.ajax({ 
    var datatosend="foo bar"; 
    url: "page.php", 
    data: datatosend, 
    processData: false 
    }); 

Tôi không biết điều gì có thể sai. Tệp txt ở đó sau khi nhấp vào div trong tệp html. Nhưng không có nội dung trong tệp. Nếu tôi chỉ viết $ _POST vào tệp văn bản, tệp có chứa "Array" văn bản, có nghĩa là $ _POST có một số nội dung.

Trả lời

2

vài thứ có thể đi sai ở đây. Kiểm tra các quyền trên thư mục bạn đang cố ghi vào. Ngoài ra hãy chắc chắn rằng cuộc gọi ajax của bạn đang sử dụng phương thức POST.

$.ajax({ 
    url: "page.php", 
    type : 'POST', 
    ... 
}); 

Như được đặt trong số jQuery documentation, thông số loại đặt loại yêu cầu, POST hoặc GET.

Loại yêu cầu tạo ("POST" hoặc "GET"), mặc định là "NHẬN".


Một điều cần xem xét là bạn đang không thực sự ghi dữ liệu JSON. Dữ liệu được gửi ở định dạng đó nhưng khi nó được chuyển đến biến số $_POST, nó đã được chuyển đổi thành một mảng. Những gì bạn nên cố gắng làm là viết một mảng PHP vào file -

$fh = fopen($myFile, 'w'); 
fwrite($fh,'<?php $arr='.var_export($_POST['data'],true).' ?>'); 
fclose($fh); 

Điều đó sẽ cung cấp cho một tập tin tương tự như sau -

<?php 
    $arr = array(
    'foo'=>'bar' 
) 
?> 

Như bạn có thể thấy, var_export() hàm trả về một phiên bản được phân tách của biến.

var_export - Đầu ra hoặc trả về một chuỗi đại diện được phân tách của một biến

+0

Tôi đã thử cũng loại "POST" và mã với var_export. Không có gì làm việc cho tôi. Đầu ra với var_export là Jens

+0

Bạn có chắc chắn rằng ' $ _POST ['dữ liệu'] 'chứa dữ liệu thực tế? Bạn cũng có thể muốn bật báo cáo lỗi để xem có bất kỳ ngoại lệ cơ bản nào không ... – Lix

+0

Tôi chắc chắn rằng;) Bạn có ý gì với báo cáo lỗi? Nếu tôi viết 'error_reporting (E_ALL);' vào tập tin php và chỉ cần mở tập tin php trong trình duyệt, nó sẽ báo cho tôi biết 'Thông báo: Chỉ mục không xác định: dữ liệu trong ...' và cứ thế. Nhưng điều đó phải là, bởi vì nếu tôi trực tiếp mở tập tin php $ _POST phải là NULL. – Jens

0

Bạn cần phải thực hiện một cuộc gọi POST, xem dưới đây:

$('#test').click(function(){ 
    $.ajax({ 
     url: "page.php", 
     type : 'post', 
     data: {"foo": "bar"}, 
     processData: false, 
     contentType: 'application/json' 
    }); 

}); 
+0

Oh yeah, tôi quên mất rằng trong ví dụ trên. Nhưng điều đó cũng không hoạt động: ( – Jens

0

Theo mặc định, tất cả các $ .ajax() yêu cầu được gửi bằng cách sử dụng GET phương thức, không phải POST.Bạn sẽ cần phải xác định loại như 'POST':

$.ajax({ 
    var datatosend="foo bar"; 
    url: "page.php", 
    type: 'post', 
    data: datatosend, 
    processData: false 
    }); 

Từ các tài liệu:

loại - Chuỗi

Mặc định: 'GET'

Các loại yêu cầu để tạo ("POST" hoặc "GET"), mặc định là "GET". Lưu ý: Các phương thức yêu cầu HTTP khác, chẳng hạn như PUT và DELETE, cũng có thể được sử dụng tại đây, nhưng chúng không được tất cả các trình duyệt hỗ trợ.

0

Có thể là nó phải được

$.ajax({ 
    url: "page.php", 
    type: "POST", // add this 
    data: {"foo": "bar"}, 
    processData: false, 
    contentType: 'application/json' 
}); 

HOẶC

trong PHP sử dụng $_REQUEST thay vì $_POST

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