0

这是我的 JS:

<script>
dojo.require("dijit.form.Button");

function sendText(){
  var button = dijit.byId("submitButton2");

  dojo.connect(button, "onClick", function(event){
    // The parameters to pass to xhrPost, the message, and the url to send it to
    // Also, how to handle the return and callbacks.
    var xhrArgs = {
    //type: "POST",
      url: "http://testjson.php",
      content: dojo.toJson({key1:"value1",key2:"value2"},true),
      handleAs: "text",
      load: function(newContent){
        dojo.byId("response2").innerHTML = newContent;
      },
      error: function(error){
        // We'll 404 in the demo, but that's okay.  We don't have a 'postIt' service on the
        // docs server.
        dojo.byId("response2").innerHTML = "Message posted.";
      }
    }
    dojo.byId("response2").innerHTML = "Message being sent..."
    // Call the asynchronous xhrPost
    var deferred = dojo.xhrPost(xhrArgs);
  });
}
dojo.ready(sendText);
    </script>

这是我的PHP:

    <?php 

foreach($_POST as $key => $val) echo '$_POST["'.$key.'"]='.$val.'<br />';

?>

问题是没有返回任何东西。如果我把$_POST[0]='{', $_POST[1]='k' 等逐个字符放在而不是,限制为 1000。这是一个大问题contentpostData

请有人能告诉我我做错了什么吗?我从 dojo 网站上得到了这段代码,所以应该没问题。

4

2 回答 2

0

我相信您content正在逐个字符地发送,因为您正在将内容对象转换为 JSON。根据dojo.xhrPost 文档,该content属性应该是一个 JavaScript 对象。我希望这有助于解决您的问题。

应该注意的是,这个模块已经被dojo/request/xhr弃用了,所以除非你有较低的版本要求,否则最好使用它。

于 2013-07-19T19:07:17.150 回答
0

php$_POST数组仅显示表单编码数据。在您的示例中,您正在发布 json,因此它不会直接显示在$_POST.

你有几个选择。您可以继续将数据发布为 json 并直接从 php 输入流中读取 POSTed json $data = json_decode(file_get_contents('php://input'));:. 这可能是最简单的,它取代了访问$_POST数据数组。

其他选项包括不 POST json(仅发送表单编码数据)和 POST json作为表单编码数据:

在这种情况下,你content会变成类似

content: 'my_post_data='+dojo.toJson({key1:"value1",key2:"value2"}, true),(您可能需要更改handleAs仅供参考)

然后在服务器端你可能会看到类似

$_POST['my_post_data']= '{"key1":"value1","key2":"value2"}'可以通过以下方式处理json_decode()

于 2013-07-21T17:04:04.507 回答