[英]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中顯示的結果出現。
我的問題是我無法弄清楚如何正確編寫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>
</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>
</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.