这个问题与以下内容有关:
无法使用jQuery AJAX将null传递给服务器.在服务器上收到的值是字符串"null"
但是我再次问它,因为那个问题的解决方案非常难看,而且我认为必须是更好的解决方案.
问题
当您使用POST将带有jQuery Ajax的数据发送到PHP时,您将获得字符串"false"(字符串)而不是false(bool),"true"而不是true(bool)和"null"而不是NULL:
解决方案
(在上面的问题中提出):在使用jQuery发送之前将数据转换为JSON,然后在PHP中解码该数据.使用代码:
Javascript代码:
$.ajax
(
{
url : <server_url>,
dataType: 'json',
type : 'POST',
success : receiveAjaxMessage,
data : JSON.stringify
(
{
valueTrue : true,
valueFalse: false,
valueNull : null
}
)
}
);
Run Code Online (Sandbox Code Playgroud)
PHP代码:
var_dump(json_decode(file_get_contents('php://input'), true));
Run Code Online (Sandbox Code Playgroud)
对我来说,这不是一个解决方案,只是一个丑陋的黑客.
在我的情况下的问题是我不能使用file_get_contents('php:// input')来访问$ _POST,甚至更多,我不能使用$ _POST因为我正在使用HMVC.
而且我知道我可以修复它在PHP中检查那些"false","true"和"null",或者在jQuery中发送1和0 instear true和false.
但我认为这一定是一个非常常见的问题,jQuery是一个非常常见的框架,因此我非常确定在jQuery中使用正确的类型发送数据是一种更好,更优雅的方法.
我总是遇到同样的问题,当我有2个带边框的相邻元素时,边框会被合并.对于表格,我们有border-collapse属性来解决这个问题.
我已经尝试从其中一个边缘省略边框,但这仅适用于中间的元素,第一个和最后一个元素将错过边框.
例如,有人知道列表元素的解决方案吗?
这是IE8中的已知错误,请查看此处的最后一个错误:http:
//nicolasgallagher.com/css-typography-experiment/demo/bugs.html
现在,玩一个简单的例子我发现了这个(用IE8测试它):http:
//jsfiddle.net/AjCPM/
<div id="target">
<div>div</div>
</div>
#target {
position: relative;
width: 200px;
height: 200px;
z-index: 1;
}
#target>div{
background: red; width: 200px; height: 200px;
position: relative;
z-index: 0;
}
#target:before {
top: 0; left: 10%; width: 100%; height: 100%; background: cyan;
content: "after";
position: absolute;
z-index: 10;
}
Run Code Online (Sandbox Code Playgroud)
IE8渲染红色矩形下方的青色矩形(:after),即使它具有较低的z-index.
现在是棘手的部分:
将#target> div的z-index从0更改为-1并且voilá!它解决了!
所以我现在使用大量的z-index解决了我的问题:-1;
但我对此感到不安全.
你知道更好的解决方案吗?
我正在使用:在伪元素之后,因为我有一个产品列表,并且我想在项目具有"已售出"类时添加图像.
我可以在服务器或JS中创建一个新的html元素,但我认为使用:after是正确的语义解决方案.
问题是我有点偏执:现在伪元素之后,你认为最好避免它吗?
我有这样的查询:
SELECT product.id,
GROUP_CONCAT(image.id) AS images_id,
GROUP_CONCAT(image.title) AS images_title,
GROUP_CONCAT(facet.id) AS facets_id
...
GROUP BY product.id
Run Code Online (Sandbox Code Playgroud)
并且查询有效,但不是预期的,因为如果我有一个带有5个facet和1个图像的产品(假设id为7的图像),那么我在"images_id"中得到类似的东西:
"7,7,7, 7,7"
如果我有2张图像(7和3),那么我会得到类似的东西:
"7,7,7,7,7,3,3,3,3,3"
并且在方面我得到类似的东西:
" 8,7,6,5,4,8,7,6,5,4"
我认为MySQL正在对查询返回的不同行进行某种类型的并集,然后连接所有内容.
我的预期结果是(对于最后一个例子):
images_id ="7,3"
facets_id ="8,7,6,5,4"
我可以在GROUP_CONCAT中使用DISTINCT获得它,但后来我有另一个问题:如果我有两个具有相同标题的图像,其中一个是ommited,然后我得到类似的东西:
images_id ="7,3,5"
images_title ="Title7and3,Title5"
所以我想念images_id和images_title之间的关系.
有人知道是否有可能在MySQL中进行此查询?
也许我在没有任何实际好处的情况下使一切变得复杂.我试图只执行一个查询,因为性能,但现在我不太确定它是否更快执行两个查询(一个用于选择构面,另一个用于图像).
请解释一下您认为最佳解决方案是什么以及为什么.
谢谢 !
例:
error_reporting(E_ALL | E_STRICT);
class Test {}
$obj = new Test();
$obj->undeclared = "oops"; // I want an error here !! :(
echo $obj->algo; // oops
Run Code Online (Sandbox Code Playgroud)
我在PHP 5.2.11和5.3.0上测试了它.
我不想在我的对象中使用动态属性.
在这种情况下可以强制PHP引发错误吗?
在jQuery中,如果我们使用.remove()删除一些元素,则删除与元素关联的所有绑定事件和jQuery数据.
但是如果我们用"删除"元素会发生什么.html()?
在更改任何html以避免内存泄漏之前,我们是否需要取消绑定所有元素?
Flash Builder是否支持任务列表?
我正在测试Flash Builder for PHP,我可以在PHP代码中看到我的// TODO,但在AS或MXML中却看不到.
我找到了这个插件:
http
://www.richinternet.de/blog/index.cfm? entry = 911D4B57-0F0D5A73- AF6F4D4D04099757,
但它已经很老了.
您知道如何使用Flash Builder 4.5在AS3和MXML代码中查看我的TODO列表吗?
[更新]:
我已经从richinternet.de安装了该插件,它适用于Flash Builder 4.5 for PHP.
但它非常差,它只检测TODO和FIXME,如果你打开文件,它不会搜索你的所有src的TODO和FIXME.
并且不区分大小写,这对我来说是一个问题,因为西班牙语"todo"意味着"一切",所以我现在不能在我的评论中使用todo这个词.
经过这么多年开发Flash Builder之后,我无法理解Adobe如何不包含这个插件!当你生成一个处理程序,方法等时,他们正在添加TODO注释!如果你没有在任务中显示它,我不知道如何有用!
有时我需要执行grandparent方法(也就是绕过父方法),我知道这是代码味道,但有时候我不能改变其他类(框架,库等).
在PHP中,我们可以通过以下方式实现:
call_user_func(array(get_parent_class(get_parent_class($childObject)), 'grandParentMethod'));
Run Code Online (Sandbox Code Playgroud)
问题是,如果您启用了E_STRICT错误,您将收到如下错误:
严格的标准:非静态方法GrandParent :: grandParentMethod()不应该在...中静态调用
我发现只有一个解决方案(没有删除E_STRICT),它只是添加@以抑制错误.
但这真的很难看,有人知道更好的解决方案吗?
谢谢 !PS:我无法实例化一个新对象,如:
$grandparent = get_parent_class(get_parent_class($son));
$gp= new $grandparent;
$gp->grandParentMethod
Run Code Online (Sandbox Code Playgroud)
因为我需要在$ son的上下文中调用我的祖父母方法.
MVC的PRG模式有哪些最佳实践?
在本教程:
http://www.theserverside.com/news/1365146/Redirect-After-Post
所提出的解决方案要求4个动作:
Create_Item(POST)=> "复位"的形式,并且重定向到Display_Item
Display_Item(GET)= >显示表单(具有临时数据和错误,如果存在)
Store_Item(POST)=>尝试将数据保存到DB,如果错误,保存错误并重定向到Display_Item,如果成功重定向到Display_Stored
Display_Stored(GET)=>显示项目创建或成功的消息,tec.
现在,我认为使用POST进行第一个操作是一个问题,因为我们无法使用链接启动表单.在Create_Item中使用GET 似乎是一个更好的选择.
此外,我们可以对3个操作执行相同的操作(对Create_Item和Display_Item使用相同的操作,但使用额外的标志重置表单,例如:
http ://www.example.com/controller/Create_Item/? reset = 1
而且我们也可以只用2个动作做同样的事情,因为我们可以在Create_Item里面使用if 来检查请求是GET还是POST(所以我们将Display_Item与Store_Item结合起来).
而且我们也可以做同样的事情1个操作,因为我们可以有一个额外的标记(在URL查询或会话中)来显示结果而不是表单:
GET http://www.example.com/controller/Create_Item/?reset=1 =>显示一个新表单并重定向到下一个URL
GET http://www.example.com/controller/Create_Item/ =>显示一个包含临时数据和错误的表单(如果存在)
POST http://www.example.com/controller/ Create_Item / =>保存temp中的错误或DB中的数据(并设置成功的会话标志)并重定向到上面的URL或下一个URL
GET http://www.example.com/controller/Create_Item/ => if $ _SESSION ['success']显示结果
我个人喜欢有4个动作的想法,但我没有任何其他选项的真正优势.但是如果没有真正的标准,我选择我的设计并不安全.
有人知道每个设计的PROS和CONS(如果有的话)吗?
例如,我看到4个动作更清晰,但如果我们想要更改临时数据的保存方式,我们需要在4个位置更改它.
谢谢!
你知道任何PHP IDE能够重命名类和命名空间,并正确地重构代码(所有文件)吗?
php ×5
css ×2
jquery ×2
ajax ×1
border ×1
collapse ×1
dynamic ×1
events ×1
group-concat ×1
ide ×1
inheritance ×1
list ×1
memory-leaks ×1
mysql ×1
namespaces ×1
post ×1
properties ×1
refactoring ×1
rename ×1
task ×1
todo ×1
unbind ×1
z-index ×1