通过AJAX从Web服务(asp.net)检索数据时出现Javascript错误

时间:2014-06-26 18:46:56

标签: javascript asp.net ajax web-services soap

我创建了一个简单的ASP.NET Web应用程序,它具有基本的Web服务。在客户端,我有Javascript代码,可以使用AJAX从Web服务中检索数据。

我的webservice生成一个带有一些基本数据(名称,街道,电话)的学生对象,并通过JS调用将其发送给客户端。

客户端有一个按钮,可以通过JS激活对Web服务的调用。

我的问题是当我点击JS按钮从webservice获取数据时,我总是得到与我的JS webservice调用函数相关的错误消息:

“JavaScript运行时错误:无法获取未定义或空引用的属性'GetStudentId'”

我该如何解决这个问题?

enter image description here

"ERROR JS message" "Mysolution explorer"

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

1 个答案:

答案 0 :(得分:1)

您将服务器端对象定义为:

Ajax_testing.jsonwebservice

然后将您的客户端对象称为:

Ajax_testing.jasonwebservice

客户端版本中还有一个a

如果这个客户端调用完全正常,我真的很惊讶。该服务器端代码是否真的自动发出客户端代理对象?我从来没有见过这种情况,但如果确实如此,那就太棒了。