5

我只想在服务器上的文件中保存一些 JSON(使用 Javascript 生成)。但我什至不让它与一个简单的字符串一起工作:

HTML 文件:

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

php文件是这样的:

<?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);

没有任何效果。我也试过

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

我不知道有什么问题。单击html文件中的div后,txt文件就在那里。但是文件中没有内容。如果我只是将 $_POST 写入文本文件,则该文件包含文本“数组”,这意味着 $_POST 有一些内容。

4

4 回答 4

2

这里很少有事情会出错。检查您尝试写入的目录的权限。还要确保您的 ajax 调用使用的是 POST 方法。

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

jQuery 文档中所述,type 参数设置请求类型,POST 或 GET。

要发出的请求类型(“POST”或“GET”),默认为“GET”。


要考虑的另一件事是,您实际上并没有编写 JSON 数据。数据以该格式发送,但当它到达$_POST变量时,它已被转换为数组。您应该尝试将 PHP 数组写入文件 -

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

那应该给出一个类似于这个的文件 -

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

如您所见,该var_export()函数返回变量的可解析版本。

var_export — 输出或返回变量的可解析字符串表示

于 2012-08-30T10:28:19.843 回答
0

您需要POST拨打电话,见下文:

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

});
于 2012-08-30T10:28:11.520 回答
0

默认情况下,所有 $.ajax() 请求都使用 GET 方法发送,而不是 POST。您需要将类型指定为“POST”:

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

从文档中:

类型 - 字符串

默认值:“获取”

要发出的请求类型(“POST”或“GET”),默认为“GET”。注意:这里也可以使用其他 HTTP 请求方法,例如 PUT 和 DELETE,但并非所有浏览器都支持。

于 2012-08-30T10:28:25.850 回答
0

也许应该是

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

或者

在 PHP 中使用$_REQUEST而不是$_POST

于 2012-08-30T10:28:54.367 回答