我在Javascript中调用C#方法时遇到了麻烦。我正在使用Framework 2.0和Asp.net WebForms。我根本无法让它在C#中调用该函数。这是我的代码:
[WebMethod]
public static List<string> GetMarkers()
{
List<string> markers = new List<string>();
string path = @"C:\Users\Utilizador\Desktop\PlaceMarks.xml";
XmlDocument xml = new XmlDocument();
xml.Load(path);
XmlNodeList elemList = xml.GetElementsByTagName("Placemark");
string name = string.Empty;
string longi = string.Empty;
string lat = string.Empty;
string join;
foreach (XmlNode elements in elemList)
{
//Marker marker = new Marker();
name = elements["description"].InnerText;
longi = elements["LookAt"].ChildNodes[0].InnerText;
lat = elements["LookAt"].ChildNodes[1].InnerText;
join = string.Format(name, longi, lat);
markers.Add(join);
}
return markers;
}
protected void Button1_Click(object sender, EventArgs e)
{
}
这是我正在使用的xml(示例)
<Placemark id="pmID_01895782-3191-412e-8495-6ed551d19b52">
<name>Buraco no pavimento</name>
<description>
<![CDATA[<b>Morada: </b>Avenida Fialho de Almeida 47, 7800 Beja, Portugal<br /><b>Categoria: </b>Conservação das Ruas e Pavimento<br /><b>Assunto: </b>Buraco no pavimento]]>
</description>
<LookAt>
<longitude>-7.8649591</longitude>
<latitude>38.0071425</latitude>
<altitude>0</altitude>
<range/>
<tilt>0</tilt>
<heading/>
<altitudeMode>relativeToGround</altitudeMode>
</LookAt>
<styleUrl>#smID_d0a732ef-461d-406b-86b7-cc88cefcf09c</styleUrl>
<Point>
<coordinates>-7.8649591,38.0071425</coordinates>
</Point>
</Placemark>
这是我的javascript代码:
<script type="text/javascript">
function getEmployees() {
$.ajax({
type: "GET",
url: 'CS.aspx/GetMarkers',
data: {},
contentType: "application/json; charset=utf-8",
dataType: "json",
beforeSend: function () {
Show(); // Show loader icon
},
success: function (response) {
complete: function () {
Hide(); // Hide loader icon
},
failure: function (jqXHR, textStatus, errorThrown) {
alert("HTTP Status: " + jqXHR.status + "; Error Text: " + jqXHR.responseText); // Display error message
}
});
}
</script>
你能帮我解决一下吗?也许我在代码中遗漏了一些东西。
发布于 2018-08-29 12:09:27
首先,您可能想要检查呼叫是否正在进入您的服务器。
1)查看开发工具中的“ 网络”选项卡。
2)当您调用'CS.aspx / GetMarkers'时,网络中的响应是什么?
3)也许您正在点击服务器但不是正确的方式,或者您可能没有发送服务器所需的内容。
4)尝试在你的ajax调用中安慰你的成功方法中的响应。
希望这些技巧能以任何方式帮助您。
发布于 2018-08-29 13:06:35
使用此Ajax调用,因为您的c#代码是正确的: -
function getEmployees() {
$.ajax({
type: "Post",
url: 'WebForm1.aspx/GetMarkers',
data: {},
contentType: "application/json; charset=utf-8",
dataType: "json",
beforeSend: function () {
},
success: function (response) {
alert(response)
}
});
}
**
测试示例请更新您的C#代码
**: -
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Services;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Xml;
namespace WebApplication8
{
public partial class WebForm1 : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
}
[WebMethod]
public static List<string> GetMarkers()
{
List<string> markers = new List<string>();
string path = @"D://test.xml";
XmlDocument xml = new XmlDocument();
xml.Load(path);
XmlNodeList elemList = xml.GetElementsByTagName("Placemark");
string name = string.Empty;
string longi = string.Empty;
string lat = string.Empty;
string join;
foreach (XmlNode elements in elemList)
{
//Marker marker = new Marker();
name = elements["description"].InnerText;
longi = elements["LookAt"].ChildNodes[0].InnerText;
lat = elements["LookAt"].ChildNodes[1].InnerText;
join = string.Format("{0}{1}{2}",name, longi, lat);
markers.Add(join);
}
return markers;
}
}
}
更新您的Xml: -
<Placemark id="pmID_01895782-3191-412e-8495-6ed551d19b52">
<name>Buraco no pavimento</name>
<description>
</description>
<LookAt>
<longitude>-7.8649591</longitude>
<latitude>38.0071425</latitude>
<altitude>0</altitude>
<range/>
<tilt>0</tilt>
<heading/>
<altitudeMode>relativeToGround</altitudeMode>
</LookAt>
<styleUrl>#smID_d0a732ef-461d-406b-86b7-cc88cefcf09c</styleUrl>
<Point>
<coordinates>-7.8649591,38.0071425</coordinates>
</Point>
</Placemark>
Aspx文件: -
<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="WebForm1.aspx.cs" Inherits="WebApplication8.WebForm1" %>
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<title></title>
</head>
<body>
<script type="text/javascript">
$(document).ready(function(){
getEmployees()
});
function displayresults(data) {
var datamerge = data
var datadisplay = "";
for (var display in datamerge)
{
datadisplay += datamerge[display];
}
alert(datadisplay)
}
function callcheck(){}
function getEmployees() {
$.ajax({
type: "Post",
url: "WebForm1.aspx/GetMarkers",
contentType: "application/json; charset=utf-8",
dataType: "json",
beforeSend: function () {
},
success: function (response) {
displayresults(response)
},
failure: function (response) {
alert(response.d);
}
});
}
</script>
<form id="form1" runat="server">
<div>
</div>
</form>
</body>
</html>
InCase如果您的控件中没有XML删除或替换CData这样的方式请参阅此
xml.innerText = xml.innerText.Replace("![CDATA[","").Replace("]]","");
xmlDoc.Save();// xmlDoc is your xml document
https://stackoverflow.com/questions/-100002477
复制相似问题