这是我的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 />';
?>
问题是没有任何东西被退回。
如果我放content
而不是postData
我有$ _POST [0] ='{',$ _POST [1] ='k'等字符,限制为1000.这是一个大问题
请有人能告诉我我做错了什么吗?我从dojo网站获得了这个代码,所以应该没问题。
答案 0 :(得分:0)
我相信您的content
是逐个字符发送的,因为您正在将内容对象转换为JSON。根据{{3}},content
属性应该是JavaScript对象。我希望这有助于解决您的问题。
应该注意的是,不推荐使用此模块而使用the dojo.xhrPost documentation,因此除非您具有较低的版本要求,否则最好使用该模块。
答案 1 :(得分:0)
php $_POST
数组仅显示表单编码数据。在您的示例中,您正在POST json,因此它不会直接显示在$_POST
。
这里有几个选项。您可以继续将数据发布为json并直接从php输入流中读取POSTed json:$data = json_decode(file_get_contents('php://input'));
。这可能是最简单的,它取代了访问数据的$_POST
数组。
其他选项包括不发布json(只发送表单编码数据)和POST作为表单编码数据的json :
在这种情况下,您的content
会变成
content: 'my_post_data='+dojo.toJson({key1:"value1",key2:"value2"}, true),
(您可能需要更改handleAs
fyi)
然后在服务器端你可能会看到像
这样的东西 $_POST['my_post_data']= '{"key1":"value1","key2":"value2"}'
可以由json_decode()