小编FtD*_*Xw6的帖子

标准的JSON API响应格式?

是否存在用于从API构造JSON响应的标准或最佳实践?显然,每个应用程序的数据都是不同的,所以我不关心,而是"响应样板",如果你愿意的话.我的意思的一个例子:

成功要求:

{
  "success": true,
  "payload": {
    /* Application-specific data would go here. */
  }
}
Run Code Online (Sandbox Code Playgroud)

请求失败:

{
  "success": false,
  "payload": {
    /* Application-specific data would go here. */
  },
  "error": {
    "code": 123,
    "message": "An error occurred!"
  }
}
Run Code Online (Sandbox Code Playgroud)

json response request

642
推荐指数
11
解决办法
50万
查看次数

如何响应HTTP OPTIONS请求?

OPTIONS推测,HTTP 方法用于确定服务器在给定资源上支持的其他方法.鉴于此,我有两个问题:

  • 这种反应是什么样的?我所看到的例子与CSV列出Public,Allow甚至Access-Control-Allow-Methods头.他们都需要吗?有什么不同? RFC 2616在这里似乎没有什么帮助.

  • 使用它来列出资源在非REST-API环境中支持的操作是否合适?例如,如果我ConversionController支持该操作convert,那么这样的响应是否有意义:

请求:

OPTIONS /conversion HTTP/1.1
Run Code Online (Sandbox Code Playgroud)

响应:

HTTP/1.1 200 OK
...
Allow: CONVERT
...
Run Code Online (Sandbox Code Playgroud)

http

73
推荐指数
3
解决办法
6万
查看次数

JavaScript类

我理解基本的JavaScript伪类:

function Foo(bar) {
    this._bar = bar;
}

Foo.prototype.getBar = function() {
    return this._bar;
};

var foo = new Foo('bar');
alert(foo.getBar()); // 'bar'
alert(foo._bar); // 'bar'
Run Code Online (Sandbox Code Playgroud)

我也理解模块模式,它可以模拟封装:

var Foo = (function() {
    var _bar;

    return {
        getBar: function() {
            return _bar;
        },
        setBar: function(bar) {
            _bar = bar;
        }
    };
})();

Foo.setBar('bar');
alert(Foo.getBar()); // 'bar'
alert(Foo._bar); // undefined
Run Code Online (Sandbox Code Playgroud)

但是这两种模式都有类似OOP的属性.前者不提供封装.后者不提供实例化.可以修改这两种模式以支持伪继承.

我想知道的是,是否有任何模式允许:

  • 遗产
  • 封装(支持"私有"属性/方法)
  • 实例化(可以有多个"类"实例,每个实例都有自己的状态)

javascript oop design-patterns

45
推荐指数
3
解决办法
4万
查看次数

如何创建由其他接口组成的接口?

我想创建一个接口,IFoo即基本上是一个自定义接口的组合,IBar和一些原生接口,ArrayAccess,IteratorAggregate,和Serializable.PHP似乎不允许实现其他接口的接口,因为我在尝试时遇到以下错误:

PHP解析错误:语法错误,意外的T_IMPLEMENTS,在Y行的X中期望'{'

我知道接口可以扩展其他接口,但PHP不允许多重继承,我无法修改本机接口,所以现在我卡住了.

我是否必须复制其中的其他接口IFoo,或者是否有更好的方法允许我重用本机接口?

php interface

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

jQuery AJAX错误处理(HTTP状态代码)

我们有一个API,它使用正确的HTTP状态代码来处理错误,并使用JSON编码的响应和适当的Content-Type标头进行响应.我的情况是,当它遇到HTTP错误状态而不是回调时jQuery.ajax()触发回调,所以即使我们有一个可理解的JSON响应,我们也必须求助于这样的事情:errorsuccess

$.ajax({
    // ...
    success: function(response) {
        if (response.success) {
            console.log('Success!');
            console.log(response.data);
        } else {
            console.log('Failure!');
            console.log(response.error);
        }
    },
    error: function(xhr, status, text) {
        var response = $.parseJSON(xhr.responseText);

        console.log('Failure!');

        if (response) {
            console.log(response.error);
        } else {
            // This would mean an invalid response from the server - maybe the site went down or whatever...
        }
    }
});
Run Code Online (Sandbox Code Playgroud)

是否有更好的范例,而不是在每次jQuery.ajax()通话中的两个位置进行相同的错误处理?它不是很干,而且我确信在这些情况下,我错过了一些关于良好错误处理方法的内容.

ajax error-handling jquery

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

Chrome/HTML5:输入类型编号不符合最大属性?

我有以下标记:

<input type="number" max="99" />
Run Code Online (Sandbox Code Playgroud)

在谷歌浏览器(以及可能的其他webkit浏览器)中,这将限制微调器的向上箭头超过99,但它不会阻止用户键入高于99的数字.即使是onblur,也不会删除/替换无效值或即使是警告,因为该值无效.

我是否误解了它应该如何工作,或者这是一个错误?我使用的是最新版本的Chrome(撰写本文时为19).

编辑:

为了澄清,我想知道为什么首先允许输入大于指定最大值的数字.我意识到它提供了表单提交的工具提示,告诉你它是无效的,但似乎不一致的行为,微调器不允许你超过最大值,但你可以随时键入一个高于最大值的数字来规避它.

如果由于某种原因这是期望的行为,那为什么呢?是否有更好的选择来强制输入范围而不诉诸JS?

html forms html5 google-chrome

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

如果事件处理程序尚不存在,如何绑定它?

我有一个页面,我想将拖放事件绑定到.我希望浏览器中的整个页面成为放置目标,因此我将事件绑定到document对象上.我的应用程序的内容通过AJAX加载到主内容区域,我只希望这些事件处理程序在上传页面当前可见时处于活动状态.

现在,我在检索上传页面时绑定事件处理程序; 但是,每次上传页面变为活动状态时,它都会绑定一个新的事件处理程序,这会导致处理程序在用户转到上传页面时离开多次,然后返回.我想我可以解决这个问题,如果我只能在它尚未绑定时才能使处理程序绑定.这是可能的,还是我忽略了一个更好的选择?

相关代码,如果有帮助:

$(document).bind('dragenter', function(e) {
    e.stopPropagation();
    e.preventDefault();
}).bind('dragover', function(e) {
    e.stopPropagation();
    e.preventDefault();
}).bind('drop', function(e) {
    e.stopPropagation();
    e.preventDefault();
    self._handleFileSelections(e.originalEvent.dataTransfer.files);
});
Run Code Online (Sandbox Code Playgroud)

jquery drag-and-drop event-handling

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

SplSubject/SplObserver如何有用?

标准PHP库包括哪些资源调用观察者模式的参考实现,通过的方式SplSubjectSplObserver课程.对于我的生活,我无法弄清楚这些是如何非常有用的,无法将实际事件或任何其他信息与通知一起传递:

class MySubject implements SplSubject {
    protected $_observers = [];

    public function attach(SplObserver $observer) {
        $id = spl_object_hash($observer);
        $this->_observers[$id] = $observer;
    }

    public function detach(SplObserver $observer) {
        $id = spl_object_hash($observer);

        if (isset($this->_observers[$id])) {
            unset($this->_observers[$id]);
        }
    }

    public function notify() {
        foreach ($this->_observers as $observer) {
            $observer->update($this);
        }
    }
}

class MyObserver implements SplObserver {
    public function update(SplSubject $subject) {
        // something happened with $subject, but what
        // was it???
    }
}

$subject = new …
Run Code Online (Sandbox Code Playgroud)

php spl observer-pattern

20
推荐指数
4
解决办法
6205
查看次数

在PHP中解析命令参数

是否存在从PHP解析命令参数的本地"PHP方式" string?例如,给出以下内容string:

foo "bar \"baz\"" '\'quux\''
Run Code Online (Sandbox Code Playgroud)

我想创建以下内容array:

array(3) {
  [0] =>
  string(3) "foo"
  [1] =>
  string(7) "bar "baz""
  [2] =>
  string(6) "'quux'"
}
Run Code Online (Sandbox Code Playgroud)

我已经尝试过利用token_get_all(),但PHP的变量插值语法(例如"foo ${bar} baz")在我的游行中几乎下雨了.

我完全知道我可以编写自己的解析器.命令参数语法是超级简单的,但如果有一个现有的本地方法来做,我更喜欢滚动我自己.

编辑:请注意,我正在寻找解析来自a string,而不是shell /命令行的参数.


编辑#2:下面是一个更全面的预期输入示例 - >参数输出:

foo -> foo
"foo" -> foo
'foo' -> foo
"foo'foo" -> foo'foo
'foo"foo' -> foo"foo
"foo\"foo" -> foo"foo
'foo\'foo' -> foo'foo
"foo\foo" -> foo\foo
"foo\\foo" -> foo\foo
"foo foo" -> foo foo
'foo foo' -> foo foo
Run Code Online (Sandbox Code Playgroud)

php parsing command-line-arguments

16
推荐指数
6
解决办法
3875
查看次数

从现有连接获取当前的PDO驱动程序?

我有一个接受PDO构造函数中现有连接的类:

class Foo {
    public function __construct(\PDO $conn = NULL) {
        // ...
    }

    // ...
}
Run Code Online (Sandbox Code Playgroud)

我的问题是:有没有办法确定现有PDO连接当前使用的驱动程序(最好从此处的列表中找到)?我在API文档中没有看到任何内容.

对于好奇,我想知道正在使用哪个驱动程序,因为我的类中的功能是特定于数据库的,所以我想要一种方法来验证传递给它的连接是否是正确的类型.

php pdo

15
推荐指数
2
解决办法
3943
查看次数