Ajax 调用总是以未定义的形式返回并且没有到达后面的代码

Posted

技术标签:

【中文标题】Ajax 调用总是以未定义的形式返回并且没有到达后面的代码【英文标题】:Ajax call always returning as Undefined and not reaching code behind 【发布时间】:2019-01-08 02:54:35 【问题描述】:

我知道这个问题被问了很多,但我对为什么我的方法不断返回“未定义”以及 ajax 从未真正调用方法背后的代码感兴趣。我从另一个响应中复制了这段代码,并且应该可以工作。我尝试了许多不同的 ajax 调用,但没有一个会到达后端。 (另外,如果格式关闭,我提前道歉。)

' VB

Public Class WebForm1
Inherits System.Web.UI.Page

Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
End Sub

<System.Web.Services.WebMethod()>
Public Shared Function GetCurrentTime(ByVal name As String) As String
    Return "Hello " & name & Environment.NewLine & "The Current Time is: " &
             DateTime.Now.ToString()
End Function
End Class

'javascript 和标记

<%@ Page Language="vb" AutoEventWireup="false" CodeBehind="WebForm1.aspx.vb" Inherits="TargetWeightEditor.WebForm1" %>

<!DOCTYPE html>

<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.8.3/jquery.min.js" type="text/javascript"></script>
<script type = "text/javascript">
function ShowCurrentTime() 
    $.ajax(
        type: "POST",
        url: "WebForm1.aspx/GetCurrentTime",
        data: 'name: "' + $("#<%=txtUserName.ClientID%>")[0].value + '" ',
        contentType: "application/json; charset=utf-8",
        dataType: "json",
        success: OnSuccess,
        failure: function(response) 
            alert(response.d);
        
    );

function OnSuccess(response) 
    alert(response.d);

</script>

<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
    <title></title>
</head>
<body>
    <form id="form1" runat="server">
        <div>
        Your Name :
        <asp:TextBox ID="txtUserName" runat="server"></asp:TextBox>
        <input id="btnGetTime" type="button" value="Show Current Time"
            onclick = "ShowCurrentTime()" />
        </div>
    </form>
</body>
</html>

编辑:我将“json”更改为“text”,但并没有改变问题。

【问题讨论】:

所以您说的是返回的是 JSON,但您返回的是一个字符串。 你有没有试过把AJAX的目标URL放到浏览器中看看结果如何?我有一种感觉,您在页面中错误配置了您的 Web 服务,但不熟悉 VB.NETs 实现以确认没有我自己的研究。 @epascarello 你能解释一下吗?我显然是一个初学者,已经研究过在 vb 中将字符串转换为 json,但找不到明确的答案。 接触 VB.net 已经 10 多年了,所以我无能为力 【参考方案1】:

如果存在潜在问题,这可能无法解决问题,但请先尝试这些事情。有些只是为了清理代码。

从所有脚本标签中删除type ="text/javascript"。在 HTML 5 中你不需要它。

ajax 调用中,删除dataType: "json",。你在那里什么都不需要。让它返回默认类型。

asp:TextBox 上,添加ClientIDMode="Static"。那么你就不需要$("#&lt;%=txtUserName.ClientID%&gt;")。更改后,试试这个:

data: JSON.stringify( name: $("#txtUserName").val() ),

// you might want/need to set the user name before the
// ajax call: 
var un = $("#txtUserName").val();
$.ajax(
    ...
    data: JSON.stringify( name: un ),
    ...

将您的脚本移动到 HTML 下方,就在结束 body 标记之前。

在进行更改后也要更新原始帖子中的代码。 HTH。

【讨论】:

以上是关于Ajax 调用总是以未定义的形式返回并且没有到达后面的代码的主要内容,如果未能解决你的问题,请参考以下文章

反应路由器 useparams 以未定义的形式返回

数据在第一次渲染时以未定义的形式返回

关于AJAX调用,得到返回值总为undefined的疑问

在jsp中调用ajax送了一个需下载的文件名给servlet,下载完成文件后需用需返回一个字符串,但是总是出错

以 onsubmit 形式调用 ajax 函数 [重复]

后端没有错误,但 Ajax 功能失败