小编Jay*_*com的帖子

是否无法使用JSON.stringify对错误进行字符串化?

再现问题

尝试使用Web套接字传递错误消息时遇到问题.我可以复制我面临的问题,JSON.stringify以迎合更广泛的受众:

// node v0.10.15
> var error = new Error('simple error message');
    undefined

> error
    [Error: simple error message]

> Object.getOwnPropertyNames(error);
    [ 'stack', 'arguments', 'type', 'message' ]

> JSON.stringify(error);
    '{}'
Run Code Online (Sandbox Code Playgroud)

问题是我最终得到一个空对象.

我试过的

浏览器

我首先尝试离开node.js并在各种浏览器中运行它.Chrome版本28给了我相同的结果,有趣的是,Firefox至少做了一次尝试,但遗漏了消息:

>>> JSON.stringify(error); // Firebug, Firefox 23
{"fileName":"debug eval code","lineNumber":1,"stack":"@debug eval code:1\n"}
Run Code Online (Sandbox Code Playgroud)

替换功能

然后我查看了Error.prototype.它表明原型包含诸如toStringtoSource之类的方法.知道函数不能被字符串化,我在调用JSON.stringify时包含了一个replacer函数来删除所有函数,但后来意识到它也有一些奇怪的行为:

var error = new Error('simple error message');
JSON.stringify(error, function(key, value) {
    console.log(key === ''); // true (?)
    console.log(value === error); // true …
Run Code Online (Sandbox Code Playgroud)

javascript error-handling json node.js

289
推荐指数
12
解决办法
8万
查看次数

角度ng-repeat反向

如何在角度中获得反转阵列?我正在尝试使用orderBy过滤器,但它需要一个谓词(例如'name')来排序:

<tr ng-repeat="friend in friends | orderBy:'name':true">
      <td>{{friend.name}}</td>
      <td>{{friend.phone}}</td>
      <td>{{friend.age}}</td>
<tr>
Run Code Online (Sandbox Code Playgroud)

有没有办法反转原始数组,没有排序.像那样:

<tr ng-repeat="friend in friends | orderBy:'':true">
      <td>{{friend.name}}</td>
      <td>{{friend.phone}}</td>
      <td>{{friend.age}}</td>
<tr>
Run Code Online (Sandbox Code Playgroud)

javascript arrays reverse angularjs angularjs-ng-repeat

221
推荐指数
8
解决办法
18万
查看次数

如何使用PhantomJS提交表格

我正在尝试使用phantomJS(这是一个很棒的工具btw!)为我有登录凭据的页面提交表单,然后将目标页面的内容输出到stdout.我能够使用幻像访问表单并成功设置其值,但我不太确定提交表单和输出后续页面内容的正确语法.到目前为止我所拥有的是:

var page = new WebPage();
var url = phantom.args[0];

page.open(url, function (status) {

  if (status !== 'success') {
      console.log('Unable to access network');
  } else {

    console.log(page.evaluate(function () {

      var arr = document.getElementsByClassName("login-form");
      var i;

      for (i=0; i < arr.length; i++) {

        if (arr[i].getAttribute('method') == "POST") {
          arr[i].elements["email"].value="mylogin@somedomain.com";
          arr[i].elements["password"].value="mypassword";

          // This part doesn't seem to work. It returns the content
          // of the current page, not the content of the page after 
          // the submit has been executed. Am I …
Run Code Online (Sandbox Code Playgroud)

javascript forms post phantomjs

161
推荐指数
4
解决办法
12万
查看次数

Eclipse无法启动,我没有改变任何东西

我至少一个月没有更新任何东西.我只是正常工作,突然菜单都是空白的,所以我决定重启eclipse.我点击"关闭"和"确定"以保存所有内容,但没有任何反应,所以我再次点击关闭并关闭eclipse.我点击了eclipse,加载屏幕只闪烁并消失,然后是一条消息告诉我检查.log文件.我已经多次重新启动电脑,尝试在安全模式下运行并运行eclipse.exe -clean,但没有任何作用.

有任何想法吗?

!SESSION 2013-03-12 13:46:10.078 -----------------------------------------------
eclipse.buildId=I20120608-1400
java.version=1.7.0_07
java.vendor=Oracle Corporation
BootLoader constants: OS=win32, ARCH=x86_64, WS=win32, NL=en_US
Framework arguments:  -product org.eclipse.epp.package.jee.product
Command-line arguments:  -os win32 -ws win32 -arch x86_64 -product org.eclipse.epp.package.jee.product -clean

!ENTRY org.eclipse.ui 4 4 2013-03-12 13:46:55.800
!MESSAGE An internal error has occurred.
!STACK 0
java.lang.NullPointerException
    at org.eclipse.ui.internal.Workbench.createWorkbenchWindow(Workbench.java:1228)
    ...
    at org.eclipse.equinox.launcher.Main.main(Main.java:1414)

!ENTRY org.eclipse.ui.workbench 4 0 2013-03-12 13:46:55.803
!MESSAGE An unexpected exception was thrown.
!STACK 0
java.lang.NullPointerException
    at org.eclipse.ui.internal.Workbench.createWorkbenchWindow(Workbench.java:1228)
    ...
    at org.eclipse.equinox.launcher.Main.main(Main.java:1414)

!ENTRY org.eclipse.ui 4 4 …
Run Code Online (Sandbox Code Playgroud)

java eclipse

110
推荐指数
6
解决办法
12万
查看次数

Ansible:如何更改Ansible Playbook中的活动目录?

- name: Go to the folder
  command: chdir=/opt/tools/temp
Run Code Online (Sandbox Code Playgroud)

当我运行我的剧本时,我得到:

TASK: [Go to the folder] ***************************** 
failed: [host] => {"failed": true, "rc": 256}
msg: no command given
Run Code Online (Sandbox Code Playgroud)

任何帮助深表感谢.

ansible

57
推荐指数
4
解决办法
7万
查看次数

在视图中强制应用程序/ json MIME类型(Flask)

我无法弄清楚如何强制application/jsonFlask中的视图的MIME类型.这是一个简单的视图,我为了演示目的而将它们拼凑在一起:

@app.route("/")
def testView():
    ret = '{"data": "JSON string example"}'
    return ret
Run Code Online (Sandbox Code Playgroud)

JSON字符串(保存在变量中ret)是从其他地方收集的(使用来自其他程序的stdout subprocess),所以我不能使用jsonifyFlask提供的.

我已经看过"返回Json"文档这个 Stackoverflow问题,但到目前为止我还没有运气.我一直在寻找一段时间并将继续搜索,但我想我会问这里以防万一有人遇到过这个问题.

谢谢.


请参阅以下答案

解决方案:

@app.route("/")
def testView():
    ret = '{"data": "JSON string example"}'

    resp = Response(response=ret,
                    status=200,
                    mimetype="application/json")

    return resp
Run Code Online (Sandbox Code Playgroud)

我发现这个网站很有用:用Python和Flask实现RESTful Web API

python json flask mime-types

41
推荐指数
2
解决办法
4万
查看次数

Angular JS:ng-hide和ng-show API

我有一个包含几个<div>容器的HTML页面.我需要<div>根据用户ID 显示这些容器.例如:我<div>在页面中创建了4个容器,例如div1,div2,div3和div4.我有两个用户:user1和user2.

我想在用户1访问该页面时显示div1和div3.并在user2访问它时显示div2和div4.我想用ng-hideng-showAngularJS的指令.我怎样才能做到这一点?

javascript angularjs

22
推荐指数
2
解决办法
4万
查看次数

JavaFX 2按钮大小填充宽度和宽度相同?

在Java FX 2.2中工作.场景的水平宽度是固定的,但在编译时是未知的.我想在一个完全填充场景中的水平空间的水平行中放置2个或更多按钮,每个按钮的宽度完全相同.按钮数随程序状态动态变化.什么程序片段可以实现这一目标?

java javafx-2

11
推荐指数
2
解决办法
3万
查看次数

用户进行文件更改时,FileAPI不会更新文件大小(非webkit浏览器)

我想我先用一个例子来证明这个问题,

jsfiddle:http://jsfiddle.net/e2UfM/15/ (经FF 12测试,Chrome 18.0.1025.168测试)

用法:

  • 从本地计算机加载文本文件.
  • 点击"加载文件".
  • 点击"显示文件大小" - 记下大小.
  • 修改并保存本地计算机上的文本文件.
  • 再次点击"显示文件大小".请注意在webkit浏览器(Chrome)中文件大小如何变化,但在Firefox中它没有更新文件大小

当用户对他们选择的本地文件进行更改时,非webkit浏览器不会更新其大小属性,而Chrome则会更新.两个浏览器都会更新文件的内容.

有没有办法让Firefox更新文件大小,类似于Chrome在这种情况下的工作方式?


简单的真实世界示例:

用户选择一个对于表单来说太大的文件,他们点击提交按钮并收到他们的文件太大的通知(通过警报,"大小"栏(见下文)等)

他们在本地修改文件,然后再次点击提交.

在Chrome中,文件大小会更新.当用户再次点击提交按钮时,它将再次验证其更新大小并允许上传.在Firefox中,用户必须先重新选择表单上的文件才能看到文件大小发生变化.

Firefox的部分解决方法 - @ ZER0的答案


真实世界的例子(深入):

File API的一个目的是在上传到服务器之前验证客户端的文件大小,如果我没有弄错的话.

考虑表单中存在2MB上载限制并且用户选择1MB文件的情况.Firefox和Chrome都会看到文件大小小于2MB并将其添加到表单中.我们还要说有一个简洁的条形图显示它们选择了多大的文件,以及它是否会影响文件大小限制:

用户选择的1MB文件!

但是,然后用户决定提交表单之前在本地对该文件的内容进行微小更改,并将大小超过2MB.

在Google Chrome中,我可以在客户端优雅地处理此问题.我可以在用户提交表单时再次检查文件大小,并在将其发送到服务器之前验证它实际上仍然低于1MB.但即使在用户提交表单之前,在Chrome中,我可以动态更新小条形图,因为它们在本地进行更改:

现在文件超过2MB,不好!

如果用户填写大型表单,则此"条形"(或即时通知上的任何其他形式,例如警报)非常有用.我希望用户立即知道他们的文件太大,以便他们可以更正它,而不仅仅是当他们提交表单时.

在Firefox中,因为文件大小永远不会更新,所以很乐意上传2MB文件,认为它仍然是1MB!我使用服务器端逻辑来仔细检查文件大小,但我宁愿保存服务器之旅.


我是如何遇到这个错误的:

以上示例适用于更多人,因为更多人可能已经处理了表单中的文件上传与使用File API中切片功能.这是我遇到问题的具体方式.

在我的表单中,用户选择一个文件,当他们点击提交时,屏幕上只显示最后10,000个字节,textarea以确认它确实是他们想要的文件.

考虑一个大小为50,000字节的文件.用户在表单中选择它,Chrome和Firefox都显示字节40,000 - 50,000中的字节textarea.

现在,用户将一些内容添加到文件中,并将相同的文件碰到70,000字节!

谷歌浏览器将正确更新textarea包含字节60,000-70,000.在Firefox中,因为大小将保持不变,所以它仍然只显示该范围内的字节40,000-50,000.


编辑:更新了jsfiddle以演示FF仍然可以读取更新的文件内容.只是文件大小不会随着这些新内容而改变.

编辑: https ://bugzilla.mozilla.org/show_bug.cgi?id = 756503(错误报告)

编辑:已添加和更新示例以回应@EduárdMoldován的 …

javascript firefox html5 webkit fileapi

8
推荐指数
1
解决办法
437
查看次数

WPF转换器在文本更改时实时更新文本框的背景颜色

我有两个文本框用于用户的名字和第二个名字,我创建了一个转换器,当文本等于特定字符串时,它会更改文本框的背景颜色.我遇到的问题是文本框只会在运行时更新,并且在我更改文本时不会更新文本框.

XAML:

<TextBox x:Name="forenameTextBox" Grid.Column="1" HorizontalAlignment="Left" Height="23" Margin="3" Grid.Row="1" 
                 Background="{Binding Staff,Converter ={StaticResource StaffNameToBackgroundColourConverter1}}"  
                 Text="{Binding Staff.Forename, Mode=TwoWay, NotifyOnValidationError=true, ValidatesOnExceptions=true}" VerticalAlignment="Center" Width="120"/>
<Label  Content="Surname:" Grid.Column="0" HorizontalAlignment="Left" Margin="3" Grid.Row="2" VerticalAlignment="Center"/>
<TextBox x:Name="surnameTextBox" Grid.Column="1" HorizontalAlignment="Left" Height="23" Margin="3" Grid.Row="2"
                 Background="{Binding Staff,Converter={StaticResource StaffNameToBackgroundColourConverter1}}"  
                 Text="{Binding Staff.Surname, Mode=TwoWay, NotifyOnValidationError=true, ValidatesOnExceptions=true}" VerticalAlignment="Center" Width="120"/>
Run Code Online (Sandbox Code Playgroud)

转换器代码:

public class StaffNameToBackgroundColourConverter : IValueConverter
{
    public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
    {
        var staff  = (Staff) value;
        if (staff.Forename == "Donald" && staff.Surname == "Duck")
        {
            return "Yellow";
        }
        else …
Run Code Online (Sandbox Code Playgroud)

c# wpf xaml converter

8
推荐指数
1
解决办法
2万
查看次数