2013-07-19 4 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 отображается только форма кодированных данных. В вашем примере вы POSTING json, поэтому он не будет отображаться напрямую в $_POST.

У вас есть пара вариантов здесь. Вы можете продолжить публикацию данных как json и прочитать POSTed json непосредственно из входного потока php: $data = json_decode(file_get_contents('php://input'));. Это, вероятно, самый простой способ, и он заменяет доступ к массиву $_POST для данных.

Других вариантов включают в себя не POSTING JSON (просто отправить форму кодированных данных) и Размещение 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()

+0

thx для ответа, – idan

0

Я считаю, что ваш content отправляется персонажем по символу, потому что вы конвертируете свой контентный объект в JSON. Согласно the dojo.xhrPost documentation, ожидается, что свойство content будет объектом JavaScript. Надеюсь, это поможет решить вашу проблему.

Следует отметить, что этот модуль устарел в пользу dojo/request/xhr, поэтому лучше использовать его, если у вас нет более низких требований к версии.

+0

thx Мне как-то удалось передать данные, элемент за пунктом, чтобы избежать проблем с размером. – idan

Смежные вопросы