为什么这个简单的Web服务拒绝将JSON返回给客户端?
这是我的客户端代码:
var params = { };
$.ajax({
url: "/Services/SessionServices.asmx/HelloWorld",
type: "POST",
contentType: "application/json; charset=utf-8",
dataType: "json",
timeout: 10000,
data: JSON.stringify(params),
success: function (response) {
console.log(response);
}
});
Run Code Online (Sandbox Code Playgroud)
和服务:
namespace myproject.frontend.Services
{
[WebService(Namespace = "http://tempuri.org/")]
[WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
[System.ComponentModel.ToolboxItem(false)]
[ScriptService]
public class SessionServices : System.Web.Services.WebService
{
[WebMethod]
[ScriptMethod(ResponseFormat = ResponseFormat.Json)]
public string HelloWorld()
{
return "Hello World";
}
}
}
Run Code Online (Sandbox Code Playgroud)
web.config中:
<configuration>
<system.web>
<compilation debug="true" targetFramework="4.0" />
</system.web>
</configuration>
Run Code Online (Sandbox Code Playgroud)
并回应:
<?xml version="1.0" encoding="utf-8"?>
<string xmlns="http://tempuri.org/">Hello World</string>
Run Code Online (Sandbox Code Playgroud)
无论我做什么,响应总是以XML形式返回.如何让Web服务返回Json?
编辑:
这是Fiddler HTTP跟踪: …
如何在Windows Server 2008上的IIS7中重命名虚拟目录(即更改虚拟路径名称)?
在服务器管理器中,我单击应用程序,选择基本设置,但显示当前别名的框显示为灰色,我无法编辑它.
我有一个大约的列表.500,000根弦,每根约.100个字符长.给定一个搜索词,我想识别列表中包含搜索词的所有字符串.目前,我使用Select方法("MATCH%term%")使用普通旧数据集执行此操作.我的笔记本电脑大约需要600毫秒.我想让它更快,也许100-200ms.
什么是推荐的方法?
性能至关重要,因此我可以在必要时(在合理范围内)交换内存占用以获得更好的性能 一旦初始化,字符串列表就不会改变,因此计算哈希值也是一种选择.
有没有人有推荐,哪种C#数据结构最适合这项任务?
我有一大堆文件,其中一些文件包含特殊字符(例如ä,ö,%和其他).我想要一个脚本文件迭代这些文件并重命名它们删除特殊字符.我真的不介意它做什么,但它可以用下划线代替它们,例如
Störung%20.doc将重命名为St_rung_20.doc
按优先顺序排列:
背景:我正在尝试使用Windows上的GnuPG加密这些文件,但它似乎没有使用--encrypt-files选项处理文件名中的特殊字符.
我有一个Facebook画布应用程序.我正在使用JS SDK在浏览器端对用户进行身份验证,并通过FB.api请求各种信息(例如姓名,朋友等).
我还希望通过进行ajax调用将一些额外的用户信息(不在Facebook上)保存到我的服务器上的数据库中:
{ userFavouriteColour: "Red" }
Run Code Online (Sandbox Code Playgroud)
要将其保存在服务器上并与正确的用户关联,我需要知道Facebook uid,这就出现了问题.如何将uid从客户端传递到服务器.
选项1:将uid添加到ajax请求:
{ uid: "1234567890",
userFavouriteColour: "Red" }
Run Code Online (Sandbox Code Playgroud)
这显然不好.任何人使用其他人的Facebook ID向我的网络服务发出ajax请求并更改他们喜欢的颜色将是微不足道的.
选项2:在服务器上,从cookie中提取uid:这甚至可能吗?我已经读过Facebook设置了一个包含uid和访问令牌的cookie,但我是否可以在我的域上访问此cookie?更重要的是,我是否可以从cookie中安全地提取uid,或者像选项1一样开放欺骗.
选项3:服务器上的用户服务器端身份验证:我可以使用服务器端身份验证来验证服务器上的用户身份.但是如果我已经在浏览器上使用客户端身份验证,这会有效吗?我最终会得到两个不同的访问令牌吗?我想从浏览器发出FB.api请求,所以我需要客户端上的访问令牌(不仅仅是在服务器上).
这必须是一个非常常见的场景,所以我想我缺少一些基本的东西.我已经阅读了很多Facebook文档(各种身份验证流程,访问令牌,signed_request等)和SO上的很多帖子,但我仍然不明白客户端身份验证和服务器端身份验证如何很好地协同工作.
简而言之,我想知道用户在服务器上的身份,但仍然从客户端浏览器向Facebook api发出请求?
(我在服务器上使用ASP.NET和Facebook C#SDK)
编辑:添加赏金.我希望得到一个关于如何处理这种情况甚至是一个例子的更加敏感的官方建议.如上所述,我已经阅读了很多关于身份验证流程的官方FB文档,但我仍然找不到关于客户端和服务器端身份验证如何协同工作的明确命令.
我有一个表示有向图的数据结构,我正在寻找一个好的Silverlight可视化,允许我从一个节点导航到另一个节点,最好是一些不错的动画.
有没有人知道这种显示器的任何良好的UI控件或框架?甚至来自另一个领域的样本(也许是社交网络?).我的图表没有很多节点,因此性能不会成为问题.
我见过用于Java(和Flash)的Prefuse库,这将是理想的."兴趣度"可视化是我追求的东西,但我在Silverlight中找不到任何东西.
谢谢你的任何提示.
我有一些处理需要几秒钟,所以我想在它正在进行时添加一个可视指示器.
.processing
{
background-color: #ff0000;
}
<div id="mydiv">
Processing
</div>
Run Code Online (Sandbox Code Playgroud)
脚本:
$("#mydiv").addClass("processing");
// Do some long running processing
$("#mydiv").removeClass("processing");
Run Code Online (Sandbox Code Playgroud)
我天真地认为该类将应用于div并且UI将被更新.但是,在浏览器中运行它(至少在Firefox中),div永远不会突出显示.有人可以向我解释为什么我的div永远不会突出显示?添加该类,进行处理,然后删除该类; UI不会在两者之间更新,用户永远不会看到红色背景.
我知道JS是单线程的,但我总是假设浏览器渲染会在DOM更新时同步运行.我的假设不正确吗?
更重要的是,实现这种效果的推荐方法是什么?我是否必须使用setTimeout
以使慢速处理异步并使用回调?必须有更好的方法,因为我真的不需要异步行为; 我只想要UI刷新.
编辑:
JSFiddle:http://jsfiddle.net/SE8wD/5/
(注意,您可能需要调整循环迭代次数,以便在您自己的PC上为您提供合理的延迟)
假设我只想将一个简单的点击处理程序附加到一个元素,我总是这样做:
$("#mydiv").click(function() { ... });
Run Code Online (Sandbox Code Playgroud)
看看JQuery文档,它似乎.on()
是附加事件处理程序和替换的"推荐"方式.bind()
,.delegate()
并且.live()
:
从jQuery 1.7开始,.on()方法提供了附加事件处理程序所需的所有功能.有关从旧的jQuery事件方法转换的帮助,请参阅.bind(),. delegate()和.live().
在文档中.click()
它说:
此方法是前两个变体中.bind('click',handler)的快捷方式,第三个是.trigger('click')的快捷方式.
所以这意味着.click()
正在使用.bind()
哪些将被弃用并替换为.on()
,对吧?或者是.click()
会留下的含义,但它会在某种程度上成为一种捷径.on("click")
?
基本上,我的问题是这个...今天编写JQuery代码时,我应该使用:
Variant 1: $("#mydiv").click(function() { ... });
Run Code Online (Sandbox Code Playgroud)
要么:
Variant 2: $("#mydiv").on("click", function() { ... });
Run Code Online (Sandbox Code Playgroud)
?
在查看SlickGrid源代码时,我遇到了以下模式:
(function ($) {
var SlickEditor = {
TextCellEditor: function (args) {
...
},
LongTextCellEditor: function (args) {
...
}
};
$.extend(window, SlickEditor);
})(jQuery);
Run Code Online (Sandbox Code Playgroud)
如果我理解正确,它使用立即调用来定义各种函数对象,然后将它们合并到全局命名空间中.
所以我可以像这样全局定义我的函数,它会产生相同的效果,对吧?
function TextCellEditor (args) {
...
}
function LongTextCellEditor (args) {
...
}
Run Code Online (Sandbox Code Playgroud)
我能看到的唯一区别是,在第一个版本中,我可以用$
速记来引用该jQuery
对象.除此之外,两种情况下的结果都是相同的.
我想知道我是否遗漏了什么.也许还有另外一个很好的理由这样做?
更新:请注意,我意识到使用这种立即调用模式允许使用匿名函数中声明的私有变量.但是在这种情况下没有声明任何变量,并且函数无论如何都被注入到全局范围中.所以我还是想知道是否有任何真正的区别.
一些答案指出,引用局部变量比引用全局变量要快得多.如果我$
从TextCellEditor()
构造函数中引用,这仍然适用.因为它是在外部匿名函数的范围内定义的,所以它$
不是本地的TextCellEditor()
.
所有评论赞赏.
环顾网络,我已经看到了这种简单的模式,该模式实现了(线程安全的)单例(在C#中)。
public sealed class MySingleton
{
private static readonly MySingleton _instance = new MySingleton();
private string[] _data = new string[10];
// Private constructor, so no outsiders have access.
private MySingleton()
{
// Initialize _data member here
}
// Static method to provide access to instance
public static MySingleton Instance
{
get { return _instance; }
}
public string GetStringCount
{
return _data.Length;
}
}
Run Code Online (Sandbox Code Playgroud)
我知道该_instance
成员需要声明为静态,因为它是从static Instance()
方法访问的。
但是是否应将其他成员声明为静态成员?根据定义,单例仅存在一次,因此成员也只能存在一次(对于单个实例),就像静态变量仅存在一次一样。
我应该声明_data
为静态吗?
c# ×3
jquery ×3
javascript ×2
asmx ×1
asp.net ×1
asynchronous ×1
batch-file ×1
contains ×1
facebook ×1
file-rename ×1
filenames ×1
gnupg ×1
graph ×1
iis-7 ×1
json ×1
prefuse ×1
search ×1
silverlight ×1
singleton ×1
sorting ×1
string ×1
tree ×1
web-services ×1
windows ×1