我收到一条警告信息:
主线程上的同步XMLHttpRequest因其对最终用户体验的不利影响而被弃用.如需更多帮助,请访问http://xhr.spec.whatwg.org/.
当执行包含脚本(具有本地src)的异步AJAX请求时,使用$.html()方法将其注入HTML .我已经将给定的脚本更改为包含async="async",但警告消息仍然存在.
我已经开始调试这个问题,发现我的附加<script>是通过来自jQuery.ajaxTransport(http://code.jquery.com/jquery-1.10.0.js,#8663)的jquery AJAX调用来处理的,其中async设置为false(这可能是问题来自).
现在 - 我该怎么办呢?
该消息显示在最新版本的Chrome和Firefox中.
虽然我无法在jsfiddle上提供测试用例,但这是一个显示问题的测试用例:
的test.html
<html>
<body>
<script type="text/javascript" src="https://code.jquery.com/jquery-2.1.3.js"></script>
<script>
$(document).ready(function(){
$.ajax({
url: '/response.html',
success: function(response){
$(document.body).html(response);
}
})
});
</script>
</body>
</html>
Run Code Online (Sandbox Code Playgroud)
response.html
<script type="text/javascript" src="/json.js" async="async"></script>
Run Code Online (Sandbox Code Playgroud)
json.js
console.log('hi');
Run Code Online (Sandbox Code Playgroud)
触发警告不需要AJAX请求 - 只需要插入一个 <script>
test2.html
<html>
<body>
<script type="text/javascript" src="https://code.jquery.com/jquery-2.1.3.js"></script>
<script>
$(document).ready(function(){
$(document.body).html('<script type="text/javascript" src="/json.js" async="async"><\/script>');
});
</script>
</body>
</html>
Run Code Online (Sandbox Code Playgroud)
值得注意的是,这已经修复,按照https://github.com/jquery/jquery/issues/2060
我真的很不知道发生了什么 - 这一切都始于PHPUnit Error: No code coverage driver is available在尝试运行测试覆盖率报告时的错误,最后我调试到下面描述的可复制集.但要设置阶段 - 我使用的是Laravel 5.5,Xdebug 2.5.5,PHPUnit 6.5.5.我的测试代码说明了这个问题:
<?php
use Tests\TestCase;
class A extends TestCase
{
public function testA()
{
echo( get_cfg_var('cfg_file_path')); exit;
}
}
Run Code Online (Sandbox Code Playgroud)
输出 C:\Users\xxx\AppData\Local\Temp\7598.tmp
将它与输出正确的php.ini路径的代码进行比较:
<?php
use PHPUnit\Framework\TestCase;
class A extends TestCase
{
public function testA()
{
echo( get_cfg_var('cfg_file_path')); exit;
}
}
Run Code Online (Sandbox Code Playgroud)
输出: C:\server\php\php.ini
怎么会这样?加载的php.ini文件如何根据执行的代码进行更改?更好的是 - 如何加载我正确的php.ini文件(启用了xdebug),而不是这个冒号?
在这两种情况下,测试都是使用 phpunit tests\unit\a
文件夹结构是:
Laravel Project
????tests
????Unit
????A.php
Run Code Online (Sandbox Code Playgroud) 给定控制模型(产品,让我们假设它具有的唯一字段是 id、标题、价格)的服务 A(CMS)以及必须显示给定模型的服务 B(运输)和 C(电子邮件)应该采用什么方法在事件溯源方法中跨这些服务同步给定的模型信息?假设产品目录很少更改(但确实会更改),并且有管理员可以非常频繁地访问货件和电子邮件的数据(示例功能是: B:display titles of products the order contained和 C: display content of email about shipping that is going to be sent)。每个服务都有自己的数据库。
解决方案1
在事件中发送有关产品的所有必需信息 - 这意味着以下结构order_placed:
{
order_id: [guid],
product: {
id: [guid],
title: 'Foo',
price: 1000
}
}
Run Code Online (Sandbox Code Playgroud)
在服务 B 和 C 上,产品信息存储在表的productJSON 属性orders中
因此,为了显示必要的信息,仅使用从事件中检索到的数据
问题:根据需要在 B 和 C 中呈现的其他信息,事件中的数据量可能会增加。B 和 C 可能不需要关于产品的相同信息,但事件必须包含两者(除非我们将事件分成两个)。如果给定的事件中不存在给定的数据,则代码无法使用它 - 如果我们为给定的产品添加颜色选项,对于 B 和 C 中的现有订单,除非我们更新事件然后重新运行它们,否则给定的产品将是无色的.
解决方案2
在事件中仅发送产品的 guid …
有关CSE的定价有点模糊:
对于CSE用户,API每天免费提供100个搜索查询.如果您需要更多,可以在API控制台中注册结算.额外请求每1000次查询需要花费5美元,每天最多10k次查询
num参数,而不是JSON 10)cx密钥计算的?我正在尝试使用Laravel验证来生成自定义错误消息,但是我无法找到我应该重写的函数.
Route:POST:/entries/用于执行验证的EntryController@store用途EntryStoreRequest.
EntryStoreRequest
namespace App\Api\V1\Requests;
class EntryStoreRequest extends ApiRequest
{
/**
* Get the validation rules that apply to the request.
*
* @return array
*/
public function rules()
{
return [
'message' => [
'string',
'required',
'max:65535',
],
'code' => [
'string',
'max:255',
'nullable'
],
'file' => [
'string',
'max:255',
'nullable'
],
'line' => [
'string',
'max:255',
'nullable'
],
'stack' => [
'string',
'max:65535',
'nullable'
]
];
}
}
Run Code Online (Sandbox Code Playgroud)
ApiRequest
namespace App\Api\V1\Requests;
use …Run Code Online (Sandbox Code Playgroud) laravel laravel-5 laravel-request laravel-response laravel-5.5
我的收藏中有以下数据:
{ colour: { r: 0, g: 0, b: 0 }},
{ colour: null },
Run Code Online (Sandbox Code Playgroud)
如何找到某些值之间colour == null或color.r之间的所有文档?
我试过了
.find({ where: { $or: [{colour: null}, {"colour.r": {$gt: 0, $lt: 100}}]}})
Run Code Online (Sandbox Code Playgroud)
但当然这给了我cannot read property 'r' of null空行.
我proc_open在 Windows 上遇到过这个问题,当我尝试使用 将 wmv 文件(到 flv)转换时ffmpeg,但是我怀疑每当某些情况发生时我都会遇到同样的情况。
基本上我的代码如下:
$descriptorspec = array
(
array("pipe", "r"),
array("pipe", "w"),
array("pipe", "w")
);
$pipes = array();
$procedure = proc_open('cd "C:/Program Files/ffmpeg/bin" && "ffmpeg.exe" -i "C:/wamp/www/project/Wildlife.wmv" -deinterlace -qdiff 2 -ar 22050 "C:/wamp/www/project/Wildlife.flv"', $descriptorspec, $pipes);
var_dump(stream_get_contents($pipes[1]));
Run Code Online (Sandbox Code Playgroud)
现在,此代码将导致 PHP 无限期挂起(如果不是stream_get_contents我将使用fgetsor stream_select,行为是一致的,则无关紧要)。
其原因(我怀疑)是,虽然 STDOUT 流成功打开,但进程不会向它写入任何内容(即使在 cmd 中运行相同的命令显示输出),因此,尝试从此类流中读取,会导致与此处描述的相同的问题,因此 - PHP 等待流中包含任何内容,进程不会向其中写入任何内容。
但是(额外的乐趣),设置stream_set_timeout还是stream_set_blocking没有任何效果。
因此 - 有人可以确认/否认正在发生的事情吗,如果可能的话,展示我如何应对这种情况?我查看了 PHP 错误,所有错误proc_open hangs似乎都已修复。
暂时我已经实施了这样的解决方案:
$timeout = 60; …Run Code Online (Sandbox Code Playgroud) 我正在使用memcache来存储Zend_Config(和其他值) - 我设置的值如下:
$memcache = new Memcache();
...
if (!$config = $memcache->get($memcache->unique_key.APPLICATION_DOMAIN."#config"))
{
...
$memcache->set($memcache->unique_key.APPLICATION_DOMAIN."#config", $config);
}
Run Code Online (Sandbox Code Playgroud)
我正在删除如下值:
$memcache->delete($key);
Run Code Online (Sandbox Code Playgroud)
从memcache中删除值后,它正确地显示在与删除相同的连接中 - $memcache->get($key)正确调用给了我NULL.但是,当我刷新脚本(并与memcache建立新连接)时,数据会弹回,就好像memcache状态没有更新一样.我尝试使用replace(具有一些特定值),达到相同的效果 - 值不会更新.
调用$memcache->flush()工作,并从memcache中删除所有内容,但我想删除特定的键.
在手册页上有一个5年前的一个神秘的消息,关于PECL版本和memcached之间的不兼容性(但是从5年前开始).有人可以向我解释可能会发生什么吗?
我在PHP 5.6上使用memcached 1.4.21和memcache(PECL)3.0.8
我想在solr内搜索所有字段以获得特定值。如果我搜索,title:six我会收到结果,但是如果我搜索,*:six则不会。我有一个all字段可以收集有关所有已索引字段的信息,因此,如果我搜索,all:six我也会得到我的结果,但是我想专门搜索*:six
在schema.xml中,我注意到了一个指令,<copyField source="*" dest="all" />但是我认为它没有任何作用(嗯,如果保留或删除它,则不会有任何变化)
有没有办法实现我的追求?
我们已经firebase-authentication为 域 创建了一个应用程序foo.bar.com。后来我们改变了,foo.bar.com实际上是这样doo.bar.com。如何更改域firebase-authentication使用以使电子邮件中的链接正确?
作为参考,我想更改此处显示的链接:
我无法更改电子邮件的内容,也找不到可以全局更改域名的地方。我可以看到操作 URL,但我认为我不应该更改它:
我有多个服务器共享一个数据库 - 在每个服务器上,一个cron作业会在5分钟内检查是否存在文本消息日志条目,创建一个文本消息日志条目并发送一条文本消息.我认为永远不会有多次发送文本消息的情况,因为一个服务器应该是第一个.
嗯 - 我错了,那种情况确实发生了:
我已经改变了这种行为来引入队列,这应该可以缓解这个问题.虽然crons仍然会开火,但是多个工作将排队,工作人员应该在不同时间接收给定的工作,从而防止两次发送消息.虽然它最终可能会成为:
等等或A和B也可能在同一时间完成相同的工作.
我想,解决方案是运行一个工作服务器.但后来我发现来自多个服务器的作业排队多次,我无法检查它们是否已经排队,因为我们最终会遇到第一个场景.
我不知道如何继续这里 - 虽然多个服务器,一个工作服务器设置将工作,我不想在队列中多次结束相同作业的实例(来自不同的服务器).
也许解决方案是拥有一个cron/queue/worker服务器,但我没有使用Laravel/multiserver环境进行设置的经验.
对我来说另一个有问题的是 - 如何测试这个?我想,我不能在本地测试它,除非有一种方法可以旋转彼此同步的VM实例.
我正在尝试编写一个单元测试来检查使用base_path()helper 的属性方法,但是,我收到一个异常:Call to undefined method Illuminate\Container\Container::basePath().
完整的堆栈跟踪如下:
\vendor\laravel\framework\src\Illuminate\Foundation\helpers.php:179
\app\Message.php:47
\vendor\laravel\framework\src\Illuminate\Database\Eloquent\Concerns\HasAttributes.php:432
\vendor\laravel\framework\src\Illuminate\Database\Eloquent\Concerns\HasAttributes.php:333
\vendor\laravel\framework\src\Illuminate\Database\Eloquent\Concerns\HasAttributes.php:306
\vendor\laravel\framework\src\Illuminate\Database\Eloquent\Model.php:1279
\tests\Unit\MessageTest.php:59
Run Code Online (Sandbox Code Playgroud)
我已经追踪到使用setUp和tearDown固定装置 - 即使我有:
public function setUp()
{
//$_SERVER['DOCUMENT_ROOT'] = dirname(__FILE__) . "/../..";
}
public function tearDown()
{
//unset($_SERVER['DOCUMENT_ROOT']);
}
Run Code Online (Sandbox Code Playgroud)
我收到上述错误。如果我完全移除固定装置,错误就会消失。
我把它换成与给定的方法后setUpBeforeClass和tearDownAfterClass错误消失,但我想知道是什么原因造成的。
据我所知,这是 vanilla Laravel 5.4 安装(完全是 5.4.36),但它安装了额外的库(我真的不能说是什么库)。我还没有设置phpunit.xml文件,但公平地说,我不知道要寻找什么。
我已经用全新安装的 Laravel(相同版本)对其进行了测试,它确实是开箱即用的(带有未改动的 phpunit.xml 文件);在 5.5 版上没有。
laravel ×3
php ×3
laravel-5.4 ×2
laravel-5.5 ×2
phpunit ×2
ajax ×1
ffmpeg ×1
jquery ×1
laravel-5 ×1
memcached ×1
mongodb ×1
proc-open ×1
solr ×1
unit-testing ×1
xdebug ×1