为什么我无法在链接点击时进行jquery / ajax调用时获得该值?

时间:2016-02-16 04:14:45

标签: javascript jquery ajax

在我的网站上,我有一个链接,其中用户ID存储如下:

<p>by <a href="#" onclick="ofUser(<?php echo $uid; ?>, event);"><?php echo $store_name; ?> (<?php echo $no_pro_of_user; ?>)</a></p>

您可以在此处查看变量$uid。这是用户ID。所以我想在点击此链接时进行ajax调用。它应该获得$uid到结果页面ofUser.php的值。但是在结果页面(ofUser.php)中它显示:

未定义的索引:id

你能告诉我怎样才能解决它?

这是JS offUser函数

function ofUser(id, event){
  id = $(id);
  event.preventDefault();
  var formData =  id;      
  $.ajax({
    url :  <?php echo "'ofUser.php'"; ?>,
    type : 'POST',
    xhr : function () {
      var myXhr = $.ajaxSettings.xhr();
      return myXhr;
    },
    beforeSend : function () {
      $("#ofUser_message").val("Searching...");
    },
    success : function (data) {
      $("#danger").hide();
      $("#bydault_pagination").hide();
      $("#bydeafult_search").hide();
      $("#ofUser_message").html(data);                            
    },

    data: formData,
    cache: false,
    contentType: false,
    processData: false
  });  
}

offUser.php

echo $uid = (int) $_POST['id'];

4 个答案:

答案 0 :(得分:2)

id = $(id);会将id转换为jQuery对象,这在这里没有任何意义。它将id设为arrayid=$(1) => [1]

另请注意,通过服务器发送的data应该是一个对象。

试试这个:

&#13;
&#13;
function ofUser(id, event) {
  event.preventDefault();
  $.ajax({
    url: 'ofUser.php',
    type: 'POST',
    xhr: function() {
      var myXhr = $.ajaxSettings.xhr();
      return myXhr;
    },
    beforeSend: function() {
      $("#ofUser_message").val("Searching...");
    },
    success: function(data) {
      $("#danger").hide();
      $("#bydault_pagination").hide();
      $("#bydeafult_search").hide();
      $("#ofUser_message").html(data);
    },

    data: {
      id: id
    },
    cache: false
  });
}
&#13;
&#13;
&#13;

修改:删除processData : true,因为它会将数据发送为DOMDocument

答案 1 :(得分:0)

尝试传递id = id;而不是id = $(id);,因为$(id)意味着您正在尝试使用jQuery获取任何DOM元素值,我希望它能够工作,还告诉我,HTML是什么为您的代码生成

<p>by <a href="#" onclick="ofUser(<?php echo $uid; ?>, event);"><?php echo $store_name; ?> (<?php echo $no_pro_of_user; ?>)</a></p>

答案 2 :(得分:0)

要解决此问题,请使用SIMPLIFY以确保正确传递ID值。在您的AJAX成功函数中,ALERT您发回的值,以便您可以立即看到您在PHP中收到的内容。

尝试以这种方式进行设置:

<强> HTML:

<p>by <a id="uid_<?php echo $uid; ?>" href="#" ><?php echo $store_name; ?> (<?php echo $no_pro_of_user; ?>)</a></p>

<强>的javascript:

$('[id^=uid_]').click(function(event){
    event.preventDefault();
    var formData = this.id.split('_')[1];
    $("#ofUser_message").val("Searching...");

    $.ajax({
        type : 'POST',
         url : 'ofUser.php',
        data : id=formData,
        success : function (data) {
            alert(data);
            $("#danger").hide();
            $("#bydault_pagination").hide();
            $("#bydeafult_search").hide();
            $("#ofUser_message").html(data);                            
        }
    });


});

<强> ofUser.php

$uid = $_POST['id']; //REMOVE the (int) for now, to verify what PHP is receiving - then add it back.
echo 'Received $uid';

注意:

(1)注意你拼错了User.php和offUser.php(不确定哪个是正确的 - 我和ofUser.php一起去了)

(2)尽量不要使用内联javascript。如上例所示,当您从HTML中分解javascript时,jQuery最容易使用。

(3)在上面的示例中,使用了jQuery选择器 starts with

$('[id^=uid_]').click(function(event){

该代码由ID为uid_的任何元素触发,因为我们配置了<a>标记的ID。这样可以很容易地在HTML中看到。

(4)这一行:

var formData = this.id.split('_')[1];

使用纯JavaScript来获取ID,因为它更快 - 并且更容易输入。代码在_字符处拆分ID的第二部分,只得到ID号。然后将该ID号分配给变量formData

(5)在AJAX代码块中,确保url拼写正确:

url : 'ofUser.php',

以下是一些其他可能有用的简单AJAX示例。不要只看它们 - 在你的服务器上重现它们并与它们一起玩。它们很简单,但你可能会学到很多东西:

AJAX request callback using jQuery

答案 3 :(得分:0)

点击任何超链接后,开始重定向到提供的网址。因此,您需要使用Click事件处理程序中的以下代码来阻止其默认操作

event.preventDefault();