【问题标题】:Create dynamic variable assignment inside $.post - JQuery在 $.post 中创建动态变量赋值 - JQuery
【发布时间】:2023-03-21 07:19:02
【问题描述】:

我可以在$.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 服务器进行交互,您都可以处理它。您在此代码中的任何地方都没有这样做。
  • 很抱歉错过了实际问题。

标签: javascript php jquery html mysqli


【解决方案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:“更短”的代码不一定是“更好”的代码。不要试图让你的代码尽可能聪明。让它简单明了。构建对象,在函数调用中使用对象。如果您可以在单个代码语句中清晰而轻松地构建对象,那么您可以直接在函数调用中做到这一点。但是您不能以您尝试的方式使用整个控制结构。
猜你喜欢
  • 2015-02-15
  • 2018-07-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-12-03
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多