【问题标题】:JavaScript and function variablesJavaScript 和函数变量
【发布时间】:2011-11-20 10:33:35
【问题描述】:

假设我在 html 表单上有这个...

<input id="world" type="text" onblur="return hello ('world');" />

在我的脚本中我有

function hello (id) {
      document.write(id);
}

它按预期返回世界。如果我这样使用它...

function hello (id) {
      var val = $('#' + id).val();
      $.post("ajax.php", {
          id: val,
      });
}

然后id返回Array,如何让它返回我想要的用户名。

谢谢。

根据 php 方面的要求...

if (isset($_REQUEST['username'])) {
    $q = $dbc -> prepare("SELECT username FROM accounts WHERE username = ?");
    $q -> execute(array($_REQUEST['username']));

    if (strlen($_REQUEST['username']) < 3) {
        echo '<div class="error">Has to be at least 3 characters</div>';
    }   
    elseif ($q -> rowCount() > 0) {
        echo '<div class="error">Username already taken</div>';
    }
    else {
         echo '<div class="success">Username available</div>';
    }
}
else {
    echo $_REQUEST;
}

如果它应该等于用户名,那么 ajax 就成功了,否则它将回显 $_REQUEST 的结果,即当前 Array

更新

调用函数:

<input id="world" type="text" onblur="return ajax ('username');" />

原函数:

function ajax (id) {

var val = $('#' + id).val();

$('.loading').fadeIn().delay(100);

$.post("ajax.php", {id: val};

}

我在数组上做了一个 var 转储,它返回了输入到文本字段中的字符串??不是我传递给函数的 id ?!?为什么会这样?

var_dump($_REQUEST) 的示例

array
 'id' => string 'dadadas' (length=7)

【问题讨论】:

  • 我认为如果它匹配多个元素以从中读取值,它只会返回一个数组。页面上有多少个 id="world" 元素?
  • 你需要显示更多的服务器端代码(ajax.php)......或者只是确保ajax.php返回你想要的值或处理数组以打印值......
  • 提供的函数应该返回undefined,而不是数组,因为这里没有返回语句。此代码是否已简化?
  • jQuery 始终只为 ID 选择器返回一个元素。 jsfiddle.net/pimvdb/gBjnJ
  • 我强烈建议您明确使用 return 子句。这不是绝对必要的,但它确实使代码更清楚地了解正在发生的事情。如果我不关心返回值,我不会使用返回,但听起来好像你确实关心返回值。

标签: php javascript variables


【解决方案1】:

您的 PHP 代码正在检查 username:

if (isset($_REQUEST['username'])) {

更改您的代码以提供username 而不是id

function hello (id) {
    var val = $('#' + id).val();
    $.post("ajax.php", {
        username: val
    });
}

$_REQUEST是一个数组,你是echoing,因为请求参数username没有找到。

【讨论】:

  • id 绝不是用户名 - 它是包含用户名的输入字段的标识符。 var val = $('#' + id).val(); 将用户名分配给 val,username:val 告诉服务器 $_REQUEST["username"] 等于 val
  • 那么我如何将文本字段的 css id 放在那里呢?我想要它,所以我可以为任何输入调用该函数,而不必定义 $_REQUEST 的名称,而是将 id 附加到它?
  • 因为您使用的是 AJAX 而不是提交表单,服务器将不知道如何处理 id - 只需将值发送给它。
  • 啊,好吧,这只是意味着为每个 ajax 请求编写一个单独的函数,并且只更改该代码的 sn-p,也许我有一天会对其进行排序,谢谢您的回答:)
【解决方案2】:

您可能在页面上拥有多个具有相同“id”值的元素。这不是有效的标记,因为“id”值在整个页面中必须是唯一的。

edit — 重复使用“id”值确实是个坏主意,但不会导致这种行为。我怀疑可能还有其他代码可以解释更多。我会在这里留下这个答案,但没有人应该投票给它:-)

【讨论】:

  • 页面上只有一个世界ID:-/
  • 无效,但不会导致这种行为。 jsfiddle.net/pimvdb/gBjnJ
  • 是的@pimdvd 我同意 - 在我输入答案后,我开始摸不着头脑,因为 jQuery 会这样做似乎很奇怪。
猜你喜欢
  • 1970-01-01
  • 2015-03-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-08-11
  • 2016-11-10
  • 1970-01-01
  • 2015-12-31
相关资源
最近更新 更多