18

MySQLクエリを実行するPHPスクリプトにajax経由で変数を渡そうとしています。ただし、「http:// myurl / database /%5Bobject%20Object%5D」でエラー404NotFoundが発生し続けます。

私が定義したPHPスクリプトではなく、http:// myurl / database /%5Bobject%20Object%5Dにデータを送信しようとしているようです。これは本当に途方に暮れています...絶対URLを入れるとうまくいくと思いました。

以下は私のコードです。どんな助けにも永遠に感謝するでしょう…。

<script type="text/javascript">
function insertData()
 {
    var dataid= $('#dataid').attr('value');
    var industry = $('#industry').attr('value');
   var geolocation = $('#geolocation').attr('value');
    $.post({
        type: "POST",
        url: "http://myURL/database/InsertData.php",
        data: "dataid="+ dataid+"&amp;industry="+ industry +"&amp;geolocation="+ geolocation,
        });
return false;
};

</script>
4

5 に答える 5

19

andiが言ったように、$。postは最初のパラメーターとしてURL文字列を期待します。オプションオブジェクトを渡したい場合は、$。ajaxを使用する必要があります。

を呼び出そうとすると$.post(<option object>)、オプションオブジェクトがURLとして使用されます。そのプロセスでは、文字列にキャストされ(文字列にキャストされたオブジェクト[object <type>]はJavascriptになります。この場合、[object Object])、URLエンコードされた()を取得します。また、またはプロトコル名で%5Bobject%20Object%5D始まらないため、/相対URLとして解釈され、現在のプロトコル、ドメイン、およびパスのプレフィックスが付けられます。次に、これ以上パラメータがないため、空のPOSTAJAXリクエストがそのURLに送信されます。

もう1つの問題は&amp;、パラメータを分離するために使用することです。これはHTMLでのみ実行する必要があります。ここでは、を使用する必要があります&。(または、Evanが言ったように、データオブジェクトは、エンコーディングの問題について考える必要はありません。)そして.val().attr('value')同じではありません。1つ目はフィールドの現在の値で、2つ目はページがロードされたときの値です。

これを正しく行う最も簡単な方法は次のとおりです。

function insertData() {
    var data = $('#dataid,#industry,#geolocation').serialize();
    $.post('http://myURL/database/InsertData.php', data);
    return false;
}

これは、3つのフィールドが同じnameでありid$。serializenameがパラメーター名に使用するものと同じであることを前提としています。

于 2012-04-28T11:56:10.880 に答える
9

を変更$.postする$.ajaxか、URLとデータをパラメータとして渡す必要があります。 $.post$.ajaxの省略形であり、URLを最初のパラメーターとして使用します。

したがって、次のようになります。

$.ajax({
    type: "POST",
    url: "http://myURL/database/InsertData.php",
    data: "dataid="+ dataid+"&amp;industry="+ industry +"&amp;geolocation="+ geolocation
});

または、$。postを使用

$.post("http://myURL/database/InsertData.php", "dataid="+ dataid+"&amp;industry="+ industry +"&amp;geolocation="+ geolocation);

ドキュメントはほとんどの場合役立つことを忘れないでください

于 2012-04-27T20:42:05.677 に答える
1

代わりに、次のようにオブジェクトでデータを送信してみてください。

data: {
    dataid : dataid,
    industry : industry,
    geolocation : geolocation
}
于 2012-04-27T20:37:05.887 に答える
1

Evanは正しいです。データをオブジェクトに送信してみてください。jqueryは、値を適切にURLエンコードします。文字列の連結は、jsで問題になる可能性があります。

于 2012-04-27T20:55:41.457 に答える
1

jqueryのバグのようです。jQuery.postはの省略形なjQuery.ajax({method:"post"});ので、コードをこれに変更しました。彼らがこの問題を修正することを願っています。

この問題は、1.10.2および2.0.2バージョンでも引き続き存在することに注意してください。

于 2013-07-18T11:20:18.907 に答える