将jquery变量传递给ajax数据

时间:2012-04-21 13:50:55

标签: javascript ajax json

我试图将这些变量从3个隐藏字段传递给ajax的数据。

我得到了正确的变量。我通过console.log验证了。我试图解析json,但它不适合我。

错误我得到未捕获的异常:[异常......“无法转换JavaScript参数”nsresult:“0x80570009(NS_ERROR_XPC_BAD_CONVERT_JS)”location:“JS frame :: http://code.jquery.com/jquery-latest.js :: :: line 7740”数据:没有]  第2行

我正在尝试使用ajax请求将这些变量传递给我的控制器。数据串中的其他变量我根本没有问题。当用户点击星级时,会发布值并将其插入数据库。

以下是变量:

       var TweetUserId =  $(this).parents().prevAll('input[type=hidden:first]') ;
          var TweetScreenName =  $(this).parents().prevAll('input[type=hidden:second]') ;
          var TweetPostText = $(this).parents().prevAll('input[type=hidden:third]') ;
 // making it an object didnt work
         //  TweetUserId = new Object; TweetUserId = (TweetUserId);
          // TweetScreenName = new Object; TweetScreenName = (TweetScreenName);
         //  TweetPostText = new Object; TweetPostText = (TweetPostText);

这是请求

          $.ajax({
              url: '/Home/GetRating', //your server side script
              dataType: "json",
              data: { id: ratingid, value: value, TweetUserId: TweetUserId, TweetScreenName: TweetScreenName, TweetPostText: TweetPostText, tweetday: dateoftweet, tweettime: timeoftweet }, //our data
              type: 'POST',
              success: function (data) {
                  //$('#ratemsg').html(data);
                  msg.html(" The TweetId is " + ratingid + " the vote value is " + value + " " + dateoftweet + "  " + timeoftweet  );
                  //       console.log(hiddenValue);
              },
              error: function (jxhr, msg, err) {
                  //  $('#response').append('<li style="color:red">' + msg + '</li>');
                  msg.html(data);
              }
          });
      });

  });

1 个答案:

答案 0 :(得分:1)

  1. 您使用选择器的方式有误,有些无效:first :second :third
    (它们应该超出[type=hidden]而没有:second :third ..请使用:eq()选择器
  2. 您正在将元素而非其值传递给ajax请求。
  3. 填充变量时使用此选项..

     var TweetUserId =  $(this).parents().prevAll('input[type="hidden"]:eq(0)').val();
     var TweetScreenName =  $(this).parents().prevAll('input[type="hidden"]:eq(1)').val();
     var TweetPostText = $(this).parents().prevAll('input[type="hidden"]:eq(2)').val();
    

    作为一般模式,最好在打算多次使用时缓存jQuery对象,而不是重新选择它。

    因此您可以使用

    改进代码
     var hiddenElements = $(this).parents().prevAll('input[type="hidden"]'),
         TweetUserId =  hiddenElements.eq(0).val(),
         TweetScreenName =  hiddenElements.eq(1).val(),
         TweetPostText = hiddenElements.eq(2).val();