我试着用本地路径“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) –