JavaScript中AJAX跨域ASMX Web服务JSONP调用错误



我有一个本地运行的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> 
    &nbsp;
</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> 
    &nbsp;
</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",

相关内容

  • 没有找到相关文章

最新更新