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" data: no] Line 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 に答える