2016-11-10 92 views
0

我有一個本地運行的Web服務,我認爲它滿足跨域JavaScript調用訪問來自動態CRM內部的外部數據的所需條件,並且正在運行創建JavaScript AJAX代碼以訪問外部Web服務時出現一些錯誤。JavaScript跨域ASMX Web服務中的AJAX錯誤JSONP調用

,我可以在屏幕截圖低於1因由通過Web服務在http://aloyegeneraltest1/ReturnJSON.asmx/GetPriceJSON

Screen Shot 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的運行時錯誤:「$」是未定義

產生新的錯誤修改後的代碼看起來是這樣的:

<%@ 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來說是全新的,對於一般的開發來說相當新,所以任何人可能提供的幫助或建議都將不勝感激。

回答

0

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

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

可能是這幾行代碼解決您的問題

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

你可以做一兩件事,只是需要設置訪問控制允許來源&接入控制允許的報頭CustomeHeaders您的web服務web.config文件。

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

如果你想只允許特定的域,你可以做到這一點與域,而不是*值的具體數值