我有一个本地运行的web服务,我相信它符合从dynamics CRM内部访问外部数据的跨域JavaScript调用所需的标准,并且我在创建JavaScript AJAX代码以访问该外部web服务时遇到了一些错误。
,我可以通过访问http://aloyegeneraltest1/ReturnJSON.asmx/GetPriceJSON
的web服务使屏幕截图1中显示的结果出现。屏幕截图1
我的问题是,我无法弄清楚如何正确地编写JavaScript代码,将实际获得序列化项目显示在上面的web服务。
当我运行下面的页面,并单击"测试"按钮时,我得到一个错误,说明0x800a1391 - JavaScript运行时错误:'GetJSONP'是未定义的。
<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="Default.aspx.cs" Inherits="ClientSideGeneralTest._Default" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "www.w3.org/.../xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<script language="JavaScript" type="text/JavaScript" src="Scripts/jquery-3.1.1.min.js">
function GetJSONP() {
debugger;
$.ajax({
url: "aloyegeneraltest1/.../GetPriceJSON",
type: "POST",
contentType: "application/json; charset=utf-8",
data: '{"name":' + JSON.stringify(GetData()) + '}'
}).done(function(result) {
alert(result.d);
}).fail(function(result) {
alert(result.d);
});
}
}
</script>
<head runat="server">
<title></title>
</head>
<body>
<form id="form1" runat="server">
<div>
<input id="Button1" type="button"
value="Test" onclick="GetJSONP()" /><br />
</div>
</form>
</body>
</html>
如果我完全删除JQuery引用,那就消除了上面的未定义函数错误,但是这样做会导致一个新的未处理的异常错误,如下所示- 0x800a1391 - JavaScript运行时错误:'$' is undefined
生成新错误的修改后的代码如下所示:<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="Default.aspx.cs" Inherits="ClientSideGeneralTest._Default" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "www.w3.org/.../xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<script language="JavaScript" type="text/JavaScript">
function GetJSONP() {
debugger;
$.ajax({
url: "aloyegeneraltest1/.../GetPriceJSON",
type: "POST",
contentType: "application/json; charset=utf-8",
data: '{"name":' + JSON.stringify(GetData()) + '}'
}).done(function(result) {
alert(result.d);
}).fail(function(result) {
alert(result.d);
});
}
</script>
<head runat="server">
<title></title>
</head>
<body>
<form id="form1" runat="server">
<div>
<input id="Button1" type="button"
value="Test" onclick="GetJSONP()" /><br />
</div>
</form>
</body>
</html>
Ajax代码开头的$似乎有某种问题。
我对AJAX完全陌生,对一般的开发也相当陌生,所以任何人都可以提供任何帮助或建议,我将非常感激。
也许这几行代码可以解决你的问题
var jsonData = [YOUR JSON PARAMETER];
$.ajax({
async: false,
type: "POST",
url: [YOUR WEB SERVICE URL],
contentType: "application/json; charset=utf-8",
data: JSON.stringify({ json: jsonData }),
dataType: "json",
success: OnSuccess,
failure: function(err) {
alert("Error : " + err.d);
}
});
function OnSuccess(data) {
alert("Success:" + data.d);
}
你只需要设置Access-Control-Allow-Origin &Access-Control-Allow-Headers在CustomeHeaders你的web服务web。配置文件。
<add name="Access-Control-Allow-Origin" value="*" />
<add name="Access-Control-Allow-Headers" value="Content-Type" />
如果你想只允许特定的域,你可以用domain的特定值来代替* value
我自己解决了问题。请参阅下面的两个不同的脚本行。
<html xmlns="http://www.w3.org/1999/xhtml">
<script language="JavaScript" src="Scripts/jquery-1.7.1.min.js"></script>
<script language="JavaScript" type="text/JavaScript">**
function GetJSONP() {
//debugger;
$.ajax({
url: "aloyegeneraltest1/.../GetPriceJSON",
type: "POST",
contentType: "application/json; charset=utf-8",