1

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

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

我收到未捕获异常的错误:[异常...“无法转换 JavaScript 参数”nsresult:“0x80570009 (NS_ERROR_XPC_BAD_CONVERT_JS)”位置:“JS 框架 :: 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);
              }
          });
      });

  });
4

1 回答 1

1
  1. 您以错误的方式使用选择器,有些是无效的:first :second :third
    (它们应该在外面[type=hidden]并且没有:second :third.. 改用:eq()选择器
  2. 您将元素而不是它们的值传递给 ajax 请求..

填充变量时使用它..

 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();
于 2012-04-21T13:56:48.227 回答