在 $.post 中创建动态变量赋值 - JQuery
Posted
技术标签:
【中文标题】在 $.post 中创建动态变量赋值 - JQuery【英文标题】:Create dynamic variable assignment inside $.post - JQuery 【发布时间】:2016-05-11 09:56:19 【问题描述】:我可以在$.post
JQuery/Ajax 代码中使用动态变量吗?我想知道我在哪里犯了错误或者我误解了JQuery的$.post
的用法。
我有动态创建的变量和从 text-fields
分配给它的值。现在我想在 JQuery 的 $.post
中使用这些变量。
代码如下:
工作正常的部分:
var boxFields = ["customerId","customerName","customerContact","customerEmail"];
var boxVar = [];
for(var x=0;x<4;x++)
boxVar[x] = $("#" + boxFields[x]).val();
alert(boxVar[1]); //Just random call to check it works.
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js"></script>
<input type="text" id="customerId" value="12345"/>
<br>
<br>
<input type="text" id="customerName" value="John Doe"/>
<br>
<br>
<input type="text" id="customerContact" value="XXXXXXXXXX"/>
<br>
<br>
<input type="text" id="customerEmail" value="xxxxxx@xxx.com"/>
现在我已经动态生成了变量(check above hidden snippet for that)
。所以使用$.post
中的那些。
更新:
抱歉,遗漏了实际部分
我的问题/疑问:我可以使用 for 循环在 $.post
中创建动态对象吗?
完整代码:
var boxFields = ["customerId","customerName","customerContact","customerEmail"];
var boxVar = [];
for(var x=0;x<4;x++)
boxVar[x] = $("#" + boxFields[x]).val();
$.post("url.php",
requestType: "updateRow",
for(var y=0;y<4;y++)
boxFields[y]: boxVar[y]
if(y!=3),
/* I want above code to work like this:
requestType: "updateRow",
customerId: 12345,
customerName: John Doe,
customerContact: XXXXXXXXXX,
customerEmail: xxxxxx@xxx.com
*/
,
function(data)
//Success Code Lines..........
);
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js"></script>
<input type="text" id="customerId" value="12345"/>
<br>
<br>
<input type="text" id="customerName" value="John Doe"/>
<br>
<br>
<input type="text" id="customerContact" value="XXXXXXXXXX"/>
<br>
<br>
<input type="text" id="customerEmail" value="xxxxxx@xxx.com"/>
也想知道如何防止SQL注入
谢谢!
【问题讨论】:
你有什么问题?什么不工作?您所说的只是您的代码“运行良好”。所以...你在问什么?至于 SQL 注入,无论您实际与 SQL 服务器进行交互,您都可以处理它。您在此代码中的任何地方都没有这样做。 很抱歉错过了实际问题。 【参考方案1】:您不能在 post 函数中放置循环(循环不是对象),但您可以在 post 之前构造数据。更清洁的方法是:
var data =
requestType: "updateRow"
;
$('input').each(function() // change the selector to be more precise
data[$(this).attr('id')] = $(this).val();
);
console.log(data);
$.post("url.php", data, function(data)
//Success Code Lines..........
);
SQL 注入
即使您可以在 JS 中进行一些检查,但真正防止 SQL 注入的唯一方法是在与 SQL 数据库交互时在服务器端转义/检查/使用特殊方法。
【讨论】:
这必须发生,因为在这种情况下找不到名为url.php
的文件。
当然是问题所在。但由于数据是正确的,它应该适合您。
很抱歉错过了实际问题。【参考方案2】:
我可以使用 for 循环在 $.post 中创建动态对象吗?
不在内部对.post()
的调用,没有。这与.post()
本身或AJAX 或类似的东西无关,而只是作为语言的语法。考虑一下你的尝试:
$.post("url.php",
requestType: "updateRow",
for(var y=0;y<4;y++)
boxFields[y]: boxVar[y]
if(y!=3),
//...
函数的第二个参数只是一个对象。循环和其他控制结构之类的东西对于声明对象无效。你可以做的就是你之前已经做过的。构建对象,然后在函数调用中使用它:
var someArray = [];
for(var x = 0; x < 4; x++)
someArray[x] = someValue;
// etc.
// later...
$.post('url.php', someArray, function () /.../ );
基本上,循环不是可以传递给函数的对象。它是命令式代码的控制结构。
【讨论】:
所以基本上我不能从数组创建动态对象(like: customerName: )
?我必须按照以前的方式去吗?
@divy3993:在使用之前创建对象有什么问题?你想在这里解决什么实际问题?你可以动态地创建东西,但你必须在语言的语法范围内这样做。
我在这里要做的是,从boxFields
中获取数组的值,我可以用它来获取text-fields
的值,因为它们有similar id's
,也可以使用@ 内部的值987654329@作为对象名(like: customerName: )
等
重点只是让代码更短。顺便谢谢您的回复。
@divy3993:“更短”的代码不一定是“更好”的代码。不要试图让你的代码尽可能聪明。让它简单明了。构建对象,在函数调用中使用对象。如果您可以在单个代码语句中清晰而轻松地构建对象,那么您可以直接在函数调用中做到这一点。但是您不能以您尝试的方式使用整个控制结构。以上是关于在 $.post 中创建动态变量赋值 - JQuery的主要内容,如果未能解决你的问题,请参考以下文章
在前块中创建的 Rspec 变量在功能规范到达 POSTed 控制器操作时被删除
java中创建一个客户类数组customer[] 怎么给数组中的变量赋值?