只有Javascript的web服务调用

Javascript only web service call

本文关键字:服务 调用 web Javascript 只有      更新时间:2023-09-26

在Dynamics CRM中,我有一个javascript文件,需要调用外部web服务(跨域)。这是一个纯JS文件;没有HTML。

JQUERY不能在这里使用(动态限制),所以我需要通过java脚本单独调用跨域web服务。

有没有人有一个例子调用跨域web服务与javascript单独?

JSONP似乎不起作用,因为我不能在文件内使用HTML元素。

你可以在c#代码中这样做:创建一个Action,要么注册一个插件,要么让代码成为code Activity,然后从JS中调用Action。有关从WebAPI调用操作的详细信息,请参阅https://msdn.microsoft.com/en-us/library/mt607600.aspx。

在c#代码中,您可以自由地使用即WebClient与外部世界通信(参见这里的示例:https://msdn.microsoft.com/en-us/library/gg509030.aspx)

我建议您使用fetch。Fetch是浏览器请求HTTP资源的一种原生方式。但是,它不支持旧的浏览器,所以如果你想支持这些浏览器,你可以使用polyfill。

如果你想调用跨域,你应该调用fetch这个选项集:

fetch('http://domain.example/', { mode: 'cors' });

您可以尝试使用Sys.Net.WebRequest。MS Dynamics CRM 2016使用该库来执行其Web API请求。在他们的Microsoft.Ajax.js资源中有引用。因此,您不需要在您的.js Web资源中引用它。

您可以在Sys.Net.WebRequest页面上找到使用示例。下面是如何使用此库调用Dynamics CRM Action的示例:

var kaId = Xrm.Page.data.entity.getId().replace("{", "").replace("}", "");
var wr = new Sys.Net.WebRequest();
wr.set_url(myCustomGetWebApiUrl() + "knowledgearticles(" + kaId + ")/Microsoft.Dynamics.CRM.new_MyCustomBoundAction");
wr.set_httpVerb("POST");
wr.set_body(null);
var headers = wr.get_headers();
headers["Content-Length"] = 0;
headers["Content-Type"] = "application/json";
headers["Accept"] = "application/json";
headers["OData-Version"] = "4.0";
wr.add_completed(function (executor) {
    var actionResponse = JSON.parse(executor.get_responseData());
    if (actionResponse)
        console.log(actionResponse);
    else
        alert("An error occurred: " + executor.get_statusText());
});
wr.invoke();