2014-05-23 34 views
1

我試圖使用winjs.xhr將一些數據發佈到URL,但沒有成功。我基本上用XMLHttpRequest做了同樣的事情。這只是感覺不對,因爲winjs.xhr,我想,無論如何,包裝XMLHttpRequest。任何人都可以解釋我如何在winjs.xhr中做到這一點?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文件越來越沒有,好像我已經給無數據在第一位。

我嘗試了一些東西,但上面的代碼是最簡單的例子。如果我要傳遞一個對象到數據參數中,它的行爲方式是相同的(註釋掉)。我已經使用了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服務器端功能,與我想象中的參數。

所以,問題是...我如何實現我在XMLHttpRequest中使用winjs.xhr的工作?它感覺像winjs.xhr這種方式應該工作(我是一個在Windows 8應用程序開發的新手,所以我很高興能夠糾正)

+0

的可能重複的[發佈JSON對象槽WinJS.XHR](http://stackoverflow.com/questions/19007540/posting-json-object-trough-winjs-xhr) – WiredPrairie

+2

這只是一個薄包裝。它不會自動設置內容類型的標題。您會在工作示例中看到您添加了標題,但在WinJs版本中,您沒有。 – WiredPrairie

回答

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); 
});