我创建了一个简单的ASP.NET Web应用程序,它具有基本的Web服务。在客户端,我有Javascript代码,可以使用AJAX从Web服务中检索数据。
我的webservice生成一个带有一些基本数据(名称,街道,电话)的学生对象,并通过JS调用将其发送给客户端。
客户端有一个按钮,可以通过JS激活对Web服务的调用。
我的问题是当我点击JS按钮从webservice获取数据时,我总是得到与我的JS webservice调用函数相关的错误消息:
“JavaScript运行时错误:无法获取未定义或空引用的属性'GetStudentId'”
我该如何解决这个问题?
my home.aspx page:
<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="home.aspx.cs" Inherits="Ajax_testing.home" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<%--<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js" type="text/javascript"></script>--%>
<script type="text/javascript" src="script/myjs.js"></script>
<title></title>
</head>
<body>
<form id="form1" runat="server">
<asp:ScriptManager ID="ScriptManager1" runat="server">
<Services>
<asp:ServiceReference Path="~/jsonwebservice.asmx" />
</Services>
</asp:ScriptManager>
<button onclick="GetStudentById()" type="button">GET AJAX DATA FROM WEBSERVICE</button>
<a href="jsonwebservice.asmx">to JSON webservice</a>
<div id="myTestDiv">
</div>
<div id="jsontest">
</div>
</form>
</body>
</html>
我的webservice jsonwebservice.asmx(不介意文件的json前缀名称)
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Services;
namespace Ajax_testing
{
/// <summary>
/// Summary description for jsonwebservice
/// </summary>
[WebService(Namespace = "http://tempuri.org/")]
[WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
[System.ComponentModel.ToolboxItem(false)]
// To allow this Web Service to be called from script, using ASP.NET AJAX, uncomment the following line.
[System.Web.Script.Services.ScriptService]
public class jsonwebservice : System.Web.Services.WebService
{
[WebMethod]
public Student GetStudentId()
{
Student student = new Student();
student.name = "S.L. Holmes";
student.street = "baker street";
student.phone = "27673627";
return student;
}
}
public class Student
{
public string name { get; set; }
public string street { get; set; }
public string phone { get; set; }
}
}
我的java脚本:myjs.js
function GetStudentById() {
Ajax_testing.jasonwebservice.GetStudentId(GetStudentByIdSuccessCallBack,
GetStudentByIdFailedCallback);
//*******correction: jasonwebservice -> jsonwebservice****
}
function GetStudentByIdSuccessCallBack(results) {
document.getElementById("myTestDiv").innerHTML = "JSON webservice <br/> " + results.name + "<br/>" + results.street + "<br/>" + results.phone + "<br/>";
}
function GetStudentByIdFailedCallback(errors) {
alert(errors.get_message());
}
答案 0 :(得分:1)
您将服务器端对象定义为:
Ajax_testing.jsonwebservice
然后将您的客户端对象称为:
Ajax_testing.jasonwebservice
客户端版本中还有一个a
。
如果这个客户端调用完全正常,我真的很惊讶。该服务器端代码是否真的自动发出客户端代理对象?我从来没有见过这种情况,但如果确实如此,那就太棒了。