如何正确使用dojo.xhrPost?

时间:2013-07-19 14:27:32

标签: php javascript ajax dojo

这是我的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网站获得了这个代码,所以应该没问题。

2 个答案:

答案 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()

处理