簡體   English   中英

跨域ASMX Web服務JSONP調用的JavaScript中的AJAX錯誤

[英]Error with AJAX in JavaScript for Cross Domain ASMX Web Service JSONP Call

我有一個本地運行的Web服務,我相信它滿足用於從Dynamics CRM中訪問外部數據的跨域JavaScript調用的必要條件,並且在創建JavaScript AJAX代碼以訪問該外部Web服務時遇到了一些錯誤。

通過訪問位於http://aloyegeneraltest1/ReturnJSON.asmx/GetPriceJSON的Web服務,可以使下面的屏幕快照1中顯示的結果出現。

屏幕截圖1

我的問題是我無法弄清楚如何正確編寫JavaScript代碼,該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運行時錯誤:“ $”未定義

產生新錯誤的修改后的代碼如下所示:

<%@ 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);                       
            }

您可以為此做一件事,只需要在Web服務web.config文件的CustomeHeaders中設置Access-Control-Allow-Origin和Access-Control-Allow-Headers。

 <add name="Access-Control-Allow-Origin" value="*" />
 <add name="Access-Control-Allow-Headers" value="Content-Type" />

如果只允許特定域,則可以使用特定域值代替*值來實現

我解決了自己的問題。 請參閱下面的兩個不同的腳本行。

<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",

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM