是否存在用于从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) 据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) 我理解基本的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的属性.前者不提供封装.后者不提供实例化.可以修改这两种模式以支持伪继承.
我想知道的是,是否有任何模式允许:
我想创建一个接口,IFoo
即基本上是一个自定义接口的组合,IBar
和一些原生接口,ArrayAccess
,IteratorAggregate
,和Serializable
.PHP似乎不允许实现其他接口的接口,因为我在尝试时遇到以下错误:
PHP解析错误:语法错误,意外的T_IMPLEMENTS,在Y行的X中期望'{'
我知道接口可以扩展其他接口,但PHP不允许多重继承,我无法修改本机接口,所以现在我卡住了.
我是否必须复制其中的其他接口IFoo
,或者是否有更好的方法允许我重用本机接口?
我们有一个API,它使用正确的HTTP状态代码来处理错误,并使用JSON编码的响应和适当的Content-Type
标头进行响应.我的情况是,当它遇到HTTP错误状态而不是回调时jQuery.ajax()
触发回调,所以即使我们有一个可理解的JSON响应,我们也必须求助于这样的事情:error
success
$.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()
通话中的两个位置进行相同的错误处理?它不是很干,而且我确信在这些情况下,我错过了一些关于良好错误处理方法的内容.
我有以下标记:
<input type="number" max="99" />
Run Code Online (Sandbox Code Playgroud)
在谷歌浏览器(以及可能的其他webkit浏览器)中,这将限制微调器的向上箭头超过99,但它不会阻止用户键入高于99的数字.即使是onblur,也不会删除/替换无效值或即使是警告,因为该值无效.
我是否误解了它应该如何工作,或者这是一个错误?我使用的是最新版本的Chrome(撰写本文时为19).
编辑:
为了澄清,我想知道为什么首先允许输入大于指定最大值的数字.我意识到它提供了表单提交的工具提示,告诉你它是无效的,但似乎不一致的行为,微调器不允许你超过最大值,但你可以随时键入一个高于最大值的数字来规避它.
如果由于某种原因这是期望的行为,那为什么呢?是否有更好的选择来强制输入范围而不诉诸JS?
我有一个页面,我想将拖放事件绑定到.我希望浏览器中的整个页面成为放置目标,因此我将事件绑定到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) 该标准PHP库包括哪些资源调用观察者模式的参考实现,通过的方式SplSubject
和SplObserver
课程.对于我的生活,我无法弄清楚这些是如何非常有用的,无法将实际事件或任何其他信息与通知一起传递:
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解析命令参数的本地"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) 我有一个接受PDO
构造函数中现有连接的类:
class Foo {
public function __construct(\PDO $conn = NULL) {
// ...
}
// ...
}
Run Code Online (Sandbox Code Playgroud)
我的问题是:有没有办法确定现有PDO
连接当前使用的驱动程序(最好从此处的列表中找到)?我在API文档中没有看到任何内容.
对于好奇,我想知道正在使用哪个驱动程序,因为我的类中的功能是特定于数据库的,所以我想要一种方法来验证传递给它的连接是否是正确的类型.