winjs.xhr数据的正确语法是什么

时间:2014-05-23 09:08:57

标签: windows-8.1 winjs

我尝试使用winjs.xhr将一些数据发布到URL但没有成功。我通过基本上使用XMLHttpRequest执行相同的操作来实现它。这感觉不对,因为winjs.xhr,我认为,无论如何都包装了XMLHttpRequest。任何人都可以在winjs.xhr中解释我是如何做到这一点的吗?

不工作winjs.xhr代码

将所有内容作为URL编码字符串传递

var url = "http://localhost/paramecho.php";

var targetUri = "http://localhost/paramecho.php";
var formParams = "username=foo&password=bar" //prefixing with a '?' makes no difference
//ends up with same response passing an object(below) or string (above)
//var formObj = {username: "foo", password: "bar"} 

WinJS.xhr({
    type: "post",
    url: targetUri,
    data: formParams

}).then(function (xhr) {
    console.log(xhr.responseText);
});

我最终得到的接收PHP文件没有得到任何参数,好像我一开始没有发送任何数据。

我尝试了一些东西,但上面的代码是最简单的例子。如果我要将一个对象传递给data参数,它的行为方式相同(注释掉)。我使用了FormData对象以及普通的JSON对象。

我更改了应用清​​单以获得正确的网络功能 - 下面的工作示例是在同一个应用中完成的,因此我确信它与功能无关。

使用XMLHttpRequest

的工作版本
var username = "foo";
var password = "bar";
var request = new XMLHttpRequest();
try {
    request.open("POST", "http://localhost/paramecho.php", false);
    request.setRequestHeader('Content-type', "application/x-www-form-urlencoded");
    request.send("username=" + encodeURIComponent(username) + "&password=" + encodeURIComponent(password));
    console.log(request.responseText);
} catch (e) {
    console.log("networkError " + e.message + "   " + e.description);
}

这用我期望的参数成功调用了我的PHP服务器端函数。

所以,问题是......如何使用winjs.xhr实现我在XMLHttpRequest中的工作?感觉就像winjs.xhr这样的工作方式(我是Windows 8应用程序开发的新手,所以我很高兴得到纠正)

1 个答案:

答案 0 :(得分:1)

你是完全正确的WiredPrairie。只需要传递标题即可 - 我想我认为这是帖子的默认值。

工作版:

WinJS.xhr({
    type: "post",
    url: targetUri,
    data: formParams,
    headers: {"Content-type": "application/x-www-form-urlencoded"}
}).then(function (xhr) {
    console.log(xhr.responseText);
});