我是JS的新手,在AJAX上经验较少。我只是想将值传递给后面的代码并返回扩展的响应。 问题是,尽管调用成功,从AJAX传递给C#的字符串值绝不是“未定义”,而是让我疯了。
JS
23
背后的守则
function test() {
var message = "this is a test" ;
Display(message);}
function Display(words) {
var hummus = { 'pass': words};
$.ajax({
type: 'POST',
url: 'Account.aspx/ShowMe',
data: hummus,
contentType: 'application/json; charset=utf-8',
dataType: 'json',
success: function (response) {
alert("Your fortune: " + response.d);
},
error: function (XMLHttpRequest, textStatus, errorThrown) {
alert("Request: " + XMLHttpRequest.toString() + "\n\nStatus: " + words + "\n\nError: " + lion);
}
});}
最终的结果总是“你的财富:未定义。我们重申这只是一个考验。” 我只想知道我错过了什么。 是的,这可能是一个愚蠢的问题,但我的搜索没有任何帮助。
答案 0 :(得分:4)
您的问题是您尝试接受方法public static string ShowMe(string pass)
中的字符串,但是您正在传递JavaScript对象作为数据。看看你何时进行Ajax调用ASP.Net将尽力将你发布的数据与参数中的类型相匹配 - 称为模型绑定。如果无法实现,则传入null。
因此,在JavaScript中,您使用以下方法传递JavaScript对象:
var hummus = { 'pass': words};
$.ajax({
....,
....,
data: hummus,
如果你想发布一个对象,那么你的控制器/方法需要有一个你的JS将被绑定的C#模型(类)。
因此,请更改您的方法以接受模型:
// somewhere in your code put this little model
// this is what your JavaScript object will get bound to when you post
public MyModel{
// this is to match the property name on your JavaScript object, its case sensitive i.e { 'pass': words};
public string pass {get;set;}
}
[WebMethod]
[ScriptMethod(ResponseFormat = ResponseFormat.Json)]
public static string ShowMe(MyModel model)
{
// you can now access the properties on your MyModel like this
string beans = model.pass + ". We repeat this is only a test.";
return beans;
}
答案 1 :(得分:1)
我在您的代码中发现了两个问题 -
data: JSON.stringify(hummus),
function test() {
var message = "this is a test";
Display(message);
}
function Display(words) {
var hummus = { 'pass': words };
$.ajax({
type: 'POST',
url: 'Account.aspx/ShowMe',
data: JSON.stringify(hummus), // Missing JSON.stringify
contentType: 'application/json; charset=utf-8',
dataType: 'json',
success: function (response) {
alert("Your fortune: " + response.d);
},
error: function (XMLHttpRequest, textStatus, errorThrown) {
// remove lion which variable doesn't exist.
alert("Request: " + XMLHttpRequest.toString() + "\n\nStatus: " + words);
}
});
}
<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="Account.aspx.cs" Inherits="WebApplication1.Account" %>
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<title></title>
</head>
<body>
<form id="form1" runat="server">
<button type="button" onclick="test()">Display Word</button>
<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.7.1/jquery.min.js"></script>
<script type="text/javascript">
function test() {
var message = "this is a test";
Display(message);
}
function Display(words) {
var hummus = { 'pass': words };
$.ajax({
type: 'POST',
url: 'Account.aspx/ShowMe',
data: JSON.stringify(hummus), // Missing JSON.stringify
contentType: 'application/json; charset=utf-8',
dataType: 'json',
success: function (response) {
alert("Your fortune: " + response.d);
},
error: function (XMLHttpRequest, textStatus, errorThrown) {
// remove lion which variable doesn't exist.
alert("Request: " + XMLHttpRequest.toString() + "\n\nStatus: " + words);
}
});
}
</script>
</form>
</body>
</html>
public partial class Account : System.Web.UI.Page
{
[WebMethod]
[ScriptMethod(ResponseFormat = ResponseFormat.Json)]
public static string ShowMe(string pass)
{
string beans = pass + ". We repeat this is only a test.";
return beans;
}
}
答案 2 :(得分:0)
谢谢你的帮助。我将尝试使用Model方法,JSON.stringify是我之前尝试过并最终工作的东西。
显然问题是我不了解我的浏览器是如何工作的。无论我做出什么改变,我都会遇到同样的错误。原因?
我的代码不在页面上的标签中,它位于一个单独的js文件中,Chrome正在为我缓存,实际上否定了我所做的每一项更改,以便尝试纠正问题并让我疯狂这个过程。
总而言之,我学会了一种新技术,模型绑定,以及代码位置可以极大地影响您的Javascript体验。