5

私は何日もの間、サンプルを見てさまざまなことを試し、ページを更新せずにフォームを Ajax で送信できるようにするために頭を悩ませてきました。そして、今はデータを送信していません..何が間違っているのかわかりません..誰かが私のajaxとフォームを実行してください。

toid はユーザー ID で、newmsg はユーザーが送信するテキストです。2 つの値が insert.php ページに送信されます。

私は本当に助けに感謝します。私は Ajax を初めて使用し、その一部を調べましたが、手がかりがありません。最終的に機能するようになった場合、自分が何を間違っていたかを理解するのに役立つかもしれません. 私はチュートリアルを調べたり、ビデオを見たりしています..しかし、ここで知っている人にとって簡単なことは非常に時間がかかることがあります. 私は ajax について間違った考えを持っている可能性があり、それはまったく意味がありません。申し訳ありません。

<script type="text/javascript">

$(document).ready(function(){

    $("form#myform").submit(function() {
homestatus()      
event.preventDefault();
var toid = $("#toid").attr("toid");
var content = $("#newmsg").attr("content");

    $.ajax({
        type: "POST",
        url: "insert.php",
        data: "toid="+content+"&newmsg="+ newmsg,
        success: function(){
           }
    });
    });
return false;
});
</script>


<form id="myform"  method="POST"  class="form_statusinput">
<input type="hidden"  name="toid" id="toid" value="<?php echo $user1_id ?>">
<input class="input" name="newmsg" id="newmsg" placeholder="Say something" autocomplete="off">
<div id="button_block">
<input type="submit" id="button" value="Feed" onsubmit="homestatus(); return false" >
</div>
</form>

INSERT.PHP

$user1_id=$_SESSION['id'];
if(isset($_POST['toid'])){

if($_POST['toid']==""){$_POST['toid']=$_SESSION['id'];}

if(isset($_POST['newmsg'])&isset($_POST['toid'])){
if($_POST['toid']==$_SESSION['id']){
rawfeeds_user_core::create_streamitem("1",$_SESSION['id'],$_POST['newmsg'],"1",$_POST['toid']);
}else{
rawfeeds_user_core::create_streamitem("3",$_SESSION['id'],$_POST['newmsg'],"1",$_POST['toid']);
4

7 に答える 7

7

コード内のバグを特定するには、firebug を使用してみてください。これは、javascript を開発するための非常に優れたコンパニオンです。ほとんどすべてのバグが原因で、firebug コンソールにエラー メッセージが表示されました。

コードにいくつかのエラーがありました。修正されたバージョンは次のとおりです。

$(document).ready(function(){
    $("form#myform").submit(function(event) {
        event.preventDefault();
        var toid = $("#toid").val();
        var newmsg = $("#newmsg").val();

        $.ajax({
            type: "POST",
            url: "insert.php",
            data: "toid=" + content + "&newmsg=" + newmsg,
            success: function(){alert('success');}
        });
    });
});

そしてここで修正されたhtml:

<form id="myform"  method="POST"  class="form_statusinput">
<input type="hidden"  name="toid" id="toid" value="<?php echo $user1_id; ?>">
<input class="input" name="newmsg" id="newmsg" placeholder="Say something" autocomplete="off">
<div id="button_block">
<input type="submit" id="button" value="Feed">
</div>
</form>
于 2012-07-21T00:43:45.757 に答える
2

実際にはso の代わりにonsubmit event使用する必要がありますform

<input type="submit" id="button" value="Feed" onsubmit="homestatus(); return false" >

かもしれない

<form id="myform"  method="POST"  class="form_statusinput" onsubmit="homestatus();">

関数/ハンドラからtrueorを返します。false

function homestatus()
{
    //...
    if(condition==true) return true;
    else return false;
}

jQuery使用しているので、次のように使用することをお勧めします

$("form#myform").on('submit', function(event){
    event.preventDefault();
    var toid = $("#toid").val(); // get value
    var content = $("#newmsg").val(); // get value
    $.ajax({
        type: "POST",
        url: "insert.php",
        data: "toid=" + toid + "&newmsg=" + content,
        success: function(data){
            // do something with data
        }
    });

});

この場合、フォームは次のようになります。

<form id="myform"  method="POST"  class="form_statusinput">
    ...
</form>

フィールドにinputは、有効なtypeandvalue属性、Html フォーム、および Inputが必要です。

についてもっと読むべきだと思いますjQuery

参照: jQuery valおよびjQuery Ajax

于 2012-07-21T00:52:24.353 に答える
1

.serialize()フォームデータをシリアル化する作業を行う方がはるかに簡単です。

送信ハンドラーもevent正式なパラメーターとして必要です。そうでない場合、エラーがスローされます(イベントは未定義になります)。

他のいくつかの変更を加えて、ここにすべてがあります:

<script type="text/javascript">
$(document).ready(function(){
    $("form#myform").submit(function(event) {
        event.preventDefault();
        homestatus();
        var formData = $(this).serialize();
        $.ajax({
            type: "POST",
            url: "insert.php",
            data: formData,
            success: function(data) {
                //...
            }
        });
    });
});
</script>

<form id="myform" class="form_statusinput">
    <input type="hidden" name="toid" id="toid" value="<?php echo $user1_id ?>">
    <input class="input" name="newmsg" id="newmsg" placeholder="Say something" autocomplete="off">
    <div id="button_block">
        <input type="submit" id="button" value="Feed" >
    </div>
</form>
于 2012-07-21T00:55:06.153 に答える
1

これはテストされていませんが、これを試してください(コメントを使用していくつかのものに注釈を付けました)

<script type="text/javascript">

$(document).ready(function(){    
    $("form#myform").submit(function(event) {
        // not sure what this does, so let's take it out of the equation for now, it may be causing errors
        //homestatus()      
        // needed to declare event as a param to the callback function
        event.preventDefault(); 
        // I think you want the value of these fields
        var toid = $("#toid").val(); 
        var content = $("#newmsg").val();

        $.ajax({
            type: "POST",
            url: "insert.php",
            data: "toid="+toid +"&newmsg="+ content,
            success: function(){
            }
        });
        return false;
    });

});

</script>


<form id="myform"  method="POST"  class="form_statusinput">
<input type="hidden"  name="toid" id="toid" value="<?php echo $user1_id ?>">
<input class="input" name="newmsg" id="newmsg" placeholder="Say something" autocomplete="off">
<div id="button_block">
<input type="submit" id="button" value="Feed" / >
</div>
</form>
于 2012-07-21T00:34:43.233 に答える
1

フォームをこれに変更します

<form id="myform" ... onsubmit="homestatus(); return false">

送信ボタンの属性は必要ありませんが、onsubmit代わりにフォーム要素に

homestatus は範囲外の可能性があります

function homestatus () {
    var toid = $("#toid").attr("toid");
    var content = $("#newmsg").attr("content");
    $.ajax({
        type: "POST",
        url: "insert.php",
        data: "toid="+content+"&newmsg="+ newmsg,
        success: function(){
           }
    });
}
于 2012-07-21T00:31:17.417 に答える
0

コードの一部を省略していない限り、問題は次の行です。

homestatus()

この関数を定義していないため、送信するとエラーがスローされます。

于 2012-07-21T00:35:50.690 に答える
-3

jQuery ( www.jquery.com ) または別の js フレームワークを調べてみてください。このようなフレームワークは、通常手動で行う必要があるほとんどのことを行います。フォーム データを送信したり、html 要素を変更したりするための便利なヘルパー関数も多数あります。

于 2012-07-21T00:37:56.913 に答える