我尝试使用winjs.xhr将一些数据发布到URL但没有成功。我通过基本上使用XMLHttpRequest执行相同的操作来实现它。这感觉不对,因为winjs.xhr,我认为,无论如何都包装了XMLHttpRequest。任何人都可以在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对象。
我更改了应用清单以获得正确的网络功能 - 下面的工作示例是在同一个应用中完成的,因此我确信它与功能无关。
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应用程序开发的新手,所以我很高兴得到纠正)
答案 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);
});