2013-07-19 85 views
0

这里是我的JS:如何正确使用dojo.xhrPost?

<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.这是一个很大的问题。

请有人可以告诉我我做错了什么?我从道场网站上获得了这个代码,所以它应该没问题。

回答

0

php $_POST数组只显示表单编码数据。在你的例子中,你在发布json,所以它不会直接显示在$_POST

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

其他选项包括不张贴JSON(只发送形式编码数据)和张贴JSON 形式编码数据:

在这种情况下,你的content会成为像

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

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

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

+0

thx回复, – idan

0

我相信你的content是逐字发送的,因为你正在将你的内容对象转换成JSON。根据the dojo.xhrPost documentationcontent属性预计为JavaScript对象。我希望这有助于解决您的问题。

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

+0

thx我都以某种方式成功传输数据,逐项以避免尺寸问题。 – idan