2017-08-04 20 views
0

我必須使用XMLHttpRequest,但我不知道函數request.send()預期哪種數據格式。我現在搜索了太久。XMLHttpRequest - request.send(data)期望哪種格式的數據?

我試圖通過一個JSON對象,但它不工作:

var request = new XMLHttpRequest(); 

    request.open("GET","fileApi"); 

    var data = { 
     action: "read", 
     targetFile: "testFile" 
    }; 

     request.addEventListener('load', function() { 
      if (request.status >= 200 && request.status < 300) { 
      $("#messageOutput").html(request.responseText); 
      } else { 
      console.warn(request.statusText, request.responseText); 
      } 
     }); 
    request.send(data); 

我得到updateFile:155 XHR finished loading: GET "http://localhost/cut/public/fileApi".

但沒有數據在服務器上接收。我做了這個簡單的檢查,批准這樣的:

PHP(服務器端):

$action = filter_input(INPUT_GET, "action"); 
$targetFile = filter_input(INPUT_GET, "targetFile"); 

echo ("action = '$action' | targetFile = '$targetFile'"); 
exit(); 

返回:行動= '' |的TargetFile =「」

可惜的是,我不能在我的應用程序使用jQuery,因爲目標是一個C#瀏覽器上(Internet Explorer)中,它檢測到jQuery的文件中的錯誤,並從工作停止我的劇本......

+0

['send'](https://developer.mozilla.org/en-US/docs/Web/API/XMLHttpRequest/send)接受一個字符串或一個FormData對象,或者自最近的一個二進制數據版本。 – Bergi

+1

「*一個C#Webbrowser(Internet Explorer)*」 -​​ wat? jQuery應該在IE中工作,如果有必要的話,可以嘗試使用舊版本。 – Bergi

+0

這看起來像服務器端的PHP,您可以控制的代碼。您希望在那裏使用哪種數據格式? – Bergi

回答

2

我不知道哪個數據格式是由函數request.send()

它可以採取多種格式的預期。一個字符串或一個FormData對象是最常見的。這部分取決於服務器的期望。

我試圖通過一個JSON對象

這是一個JavaScript對象,而不是一個JSON對象。

request.open("GET","fileApi"); 

你正在一個GET請求。 GET請求不應該有請求主體,所以你不應該傳遞任何數據到send()

GET請求期望數據被編碼到URL的查詢字符串中。

var data = { 
 
    action: "read", 
 
    targetFile: "testFile" 
 
}; 
 

 
var searchParams = new URLSearchParams(); 
 
Object.keys(data).forEach((key) => searchParams.set(key, data[key])); 
 
var url = "fileApi?" + searchParams; 
 
console.log(url); 
 
// and then… 
 
// request.open("GET", url); 
 
// request.send();

警告URLSearchParams is new and has limited browser support。尋找一個庫來生成一個查詢字符串是一個(簡單)練習,任何讀者誰想要與舊版瀏覽器的兼容性。

+0

根據這個頁面(https://www.w3schools.com/js/js_json_objects.asp)一個JSON對象。我只是錯過鍵上的引號,這是否使它不是一個JSON對象? – Black

+1

@Black - W3Schools很糟糕。該頁面錯誤。第一個例子是正確的,但它停止顯示JSON並開始顯示JavaScript。如果您在JavaScript程序中擁有JSON數據,那麼它將是一個JavaScript *字符串*。不要相信W3Schools。 – Quentin

相關問題