我試着用本地路徑「ms-appx-web:///www//demo_data//demo.json」做一個ajax調用。
首先ms-appx-web scheme可能不被jQuery.ajax()支持。實際上它是調用XMLHttpRequest
,請求需要是XMLHTTPRequest
標準。如果你調用與ms-appx-web
Ajax調用一個HTML直接,你會得到錯誤的詳細信息:
jQuery的3.2.1.min.js:4的XMLHttpRequest不能加載MS-APPX的web:///測試。 JSON。協議方案僅支持跨源請求:http,data,chrome,chrome-extension,https。
其次,文件應該在Web服務器中。本地文件可能無法通過此方法加載。而uwp應用程序不是一個Web服務器,您可能不會使用jQuery.ajax()
加載本地文件。
如果你只是想在WebView
裏面顯示json文件,你可以引用幾種方法。
- 上傳到網絡服務器並使用
jQuery.ajax()
。
通過uwp API加載Json文件,然後通過NavigateToString
方法加載它。例如(如果需要解析JSON):
StorageFile f = await StorageFile.GetFileFromApplicationUriAsync(new Uri("ms-appx:///Assets/www/test.json"));
WebBrowser.NavigateToString(await FileIO.ReadTextAsync(f));
硬代碼JSON文件的直接的JS內的內容作爲處理的對象。例如:
<script type='text/javascript'>
function doSomething() {
var data = '[{"name" : "Ashwin", "age" : "20"},{"name" : "Abhinandan", "age" : "20"}]';
var mydata = JSON.parse(data);
document.getElementById('myDiv').innerText ="name:"+ mydata[0].name;
return "done";
}
</script>
//Invoke the script by webview
private async void btninvoke_Click(object sender, RoutedEventArgs e)
{
string result = await WebBrowser.InvokeScriptAsync("doSomething", null);
}
更多細節請參考this thread,以及有關WebView
更多細節請參考official sample。
該文件不能位於服務器上。這是一個離線應用程序。這就是爲什麼json文件在本地存儲中。有沒有辦法做到這一點,而不是在加載過程中以某種方式添加json? – LazyProgrammer
@LazyProgrammer,所以另外兩種方式是不適合你的?我不確定這裏的負載是什麼意思,但可能是你可以嘗試像普通文件一樣加載json文件並從中讀取內容。在uwp應用程序中,我們有StorageFIle相關的API,在JavaScript中您可以嘗試[this thread](http://stackoverflow.com/questions/14446447/javascript-read-local-text-file) –