2

我正在使用 Jquery$.ajax方法成功地进行 AJAX 调用,因为它发布到的文件正在被调用和执行。但是,没有发送 POST 数据。我要做的就是发送数据并让文件接收它;我不在乎返回数据。

我尝试将其更改为 GET,但没有产生结果。我在收到的 URL 中传递了 GET 数据(显然,我猜)。我也尝试过更改我发送的数据类型......这些都没有让我知道我做错了什么。我也在这里浏览了许多具有类似标题的问题,但似乎没有任何东西可以解决这个问题。虽然我确信这很简单。

其他可能相关的变量:我正在使用 Knockout JS。我正在使用 .htaccess 重定向在 /public 文件夹中创建单个入口点。

事不宜迟,代码如下:

page.html

<button data-bind="click: save">Save</button>

如果你对 KOJS 不熟悉,它基本上只是在单击时调用函数 save。我很确定这工作正常。

模型.js

self.save = function() {
    var jsonData = ko.toJSON(self.tasks);
    $.ajax("http://test.local.com/js/post.php", {
        data: jsonData,
        type: "post", contentType: "application/json",
        success: function(result) { alert(jsonData) }
    });
};

该警报给了我一个格式很好的 JSON 对象,比如

[{"title": "Clean up the dog"},{"title": "Warm up the old pasta"}]

这是帖子文件,我想,我的错误在哪里?$_POST 数组为空。如果我将其更改为以 GET 形式发送,那也是空的。我在代码中添加注释来解释事情。

post.php

if (isset($_POST)) {
  //It does get inside this if. That's good at least, right?

  $my_file = 'file.txt';
  $handle = fopen($my_file, 'w') or die('Cannot open file:  '.$my_file);
  //It will make this file.

  fwrite($handle, print_r($_POST));
  //Prints "1" without the quotes


  foreach ($_POST as $key => $value) {
    fwrite($handle, 'your data: '.$value.'; ');
  }
  //Prints nothing
}

关于为什么这不会发送任何 POST 数据的任何想法?我敢肯定这很傻。谢谢!

4

1 回答 1

4

您的问题是您设置data为 JSON 字符串。根据文档 jQuery 不会处理字符串数据,只有对象http://api.jquery.com/jQuery.ajax/

而是使用ko.toJS获得一个干净的 JS 对象,这应该让你走上正确的道路。

[编辑]

我刚刚注意到您也在设置 contentType ...为此,您将无法使用$_POSTvar。相反,您需要从file_get_contents("php://input")“应该”获取原始 JSON 字符串的数据。从那里你应该能够使用 PHPjson_decode将它变成一个真正的 PHP 对象。

于 2012-12-11T22:50:06.997 回答