Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/34.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 未能将html内容发送到webservice,未找到错误_Javascript_Asp.net_Json_Web Services_Wcf - Fatal编程技术网

Javascript 未能将html内容发送到webservice,未找到错误

Javascript 未能将html内容发送到webservice,未找到错误,javascript,asp.net,json,web-services,wcf,Javascript,Asp.net,Json,Web Services,Wcf,我正在尝试将html内容作为字符串发送到Web服务,但是失败了,没有找到错误,尽管如果我发送一个简单的字符串,如“test”,同样的调用也可以工作 网络服务代码: public string List(DateTime showdate, string viewtype, int timezone, string test) { ------ whatever ------ } var showdate = "22/05/2014", viewtype = "rest",

我正在尝试将html内容作为字符串发送到Web服务,但是失败了,没有找到错误,尽管如果我发送一个简单的字符串,如“test”,同样的调用也可以工作

网络服务代码:

public string List(DateTime showdate, string viewtype, int timezone, string test)
{
    ------ whatever ------
}
var showdate = "22/05/2014",
    viewtype =  "rest",
    timezone = 2,
    test = $("body").html(); // if i change to something like: test = "My name is Inigo Montoya" it works fine.

$.ajax({
    type: option.method,
    url: option.url,
    data: {"showdate": showdate, "viewtype": viewtype, "timezone": timezone, "test": test},
    success: function(data){ //--- whatever --- },
    error: function(data){ //--- whatever --- }
});
Javascript代码:

public string List(DateTime showdate, string viewtype, int timezone, string test)
{
    ------ whatever ------
}
var showdate = "22/05/2014",
    viewtype =  "rest",
    timezone = 2,
    test = $("body").html(); // if i change to something like: test = "My name is Inigo Montoya" it works fine.

$.ajax({
    type: option.method,
    url: option.url,
    data: {"showdate": showdate, "viewtype": viewtype, "timezone": timezone, "test": test},
    success: function(data){ //--- whatever --- },
    error: function(data){ //--- whatever --- }
});

试试这个,正如您在webservices和json下标记的那样,希望这对您有用

var data={"showdate": showdate, "viewtype": viewtype, "timezone": timezone, "test": test};
var jsonData= JSON.stringify(data);
$.ajax({
    type: option.method,
    url: option.url,
    data: jsonData,
    success: function(data){ //--- whatever --- },
    error: function(data){ //--- whatever --- }
});

我相信您可能遇到了ASP内置的请求验证,该验证用于防止XSS(跨站点脚本)

默认情况下,发布包含HTML的字段会导致其拒绝请求

请求验证是ASP.NET中的一项功能,用于检查HTTP请求并确定其是否包含潜在危险的内容。在此上下文中,潜在危险的内容是请求的主体、头、查询字符串或cookie中的任何HTML标记或JavaScript代码。ASP.NET执行此检查是因为URL查询字符串、Cookie或已发布表单值中的标记或代码可能是出于恶意目的添加的

有关更多信息,请查看

请注意,可以禁用单个字段的请求验证,而不是在站点范围内进行验证

(摘自)

在控制器操作上:

[ValidateInput(false)]
ActionResult SomeAction(string validationIgnored){...}
或特定的模型属性:

[AllowHtml]
string SomeProperty {get; set;}

请注意,此保护存在是有原因的,如果您禁用它,您将承担自己验证输入的责任。查看一些建议和备选方案。

您可以在代码测试页面上打开chrome inspector,直接粘贴上面的javascript代码,查看返回的错误类型

我现在可以想到两个问题:

过长的URL

用于触发ajax调用的jQuery代码应该可以,但是这两个参数
type
data
可能会导致问题

例如,如果
$(“body”).html()
超过2000个字符,并且请求方法设置为
GET
,ajax调用将不起作用,因为URL太长,浏览器无法理解

鉴于你提到

如果我改为:test=“我的名字是Inigo Montoya”这样的话,效果很好

我相信这个问题的可能性相当大

跨域ajax

如果目标位置是外域,它们可能会通过AJAX调用拒绝访问


如上所述,强烈建议通过Chrome inspector检查此问题

尝试更改为这个
timezone=“2”,
这根本不是我的问题,我收到的很好。试试这个
test=$(“body”).html();。toString()此错误也可能由于您尝试发送的字符串的长度而发生。您的答案“test=$(“body”).html();.toString();”将给出语法错误,但将其放在一边。html()返回使用.toString()转换它的字符串将完全不起作用。这些属性在web服务中不起作用。我猜它们在asp.net web方法中使用,但在.svc web服务中不使用。@BeyondProgramming抱歉,我假设您使用的是新的。如果正在使用WCF服务,您可能希望添加WCF标记。您还可以添加一些版本信息以便我们知道您使用的框架的版本吗?谢谢顺便说一句,还有另一种通过web.config禁用验证的方法(请参见MSDN链接)。不知道这是否适用,但值得一试?Chrome inspector是我的第一选择,但如果是长度问题,这无法解决我的问题。请提供解决方案,我将标记您的答案。要解决长度问题,您只需将请求方法设置为“post”,问题就会得到解决。