2

私はこれが私が見逃している単純な解決策を持っているとかなり確信しています。次のajaxスクリプトがあります。

<!DOCTYPE html>
<html>
<head>
 <script src="http://ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js"></script>
<script>
function postForm() {
    var ret = $('#test').val();
    $.ajax({
            type: 'POST',
            url: 'http://10.0.0.8:9000/demo',
            data: '{"name" : '+ret'}',
            contentType: "application/json; charset=utf-8",

        })
    }

</script>
</head>
<body>
    <form id="ajaxForm" onSubmit="postForm(); return false;"  method="post"> 
        <input id="test" type="text" name="name" value="Hello JSON" /> 
        <input type="submit" value="Submit JSON" /> 
    </form>

</body>
</html>

id ='test'を使用して入力の値をプルし、それをret変数に入れました。次に、それをdata属性に挿入し、ajax経由で送信しようとしています。さまざまな引用符を試しましたが、何も機能していないようです。何が間違っているのでしょうか。

よろしくお願いします

4

1 に答える 1

3

AJAXスクリプトの絶対URLを指定したようです。

http://10.0.0.8:9000/demo

same origin policyブラウザに組み込まれている機能に違反しているようで、クロスドメインAJAX呼び出しを送信できません。

したがって、このHTMLページがでホストされていない限り、このAJAX呼び出しは機能しませんhttp://10.0.0.8:9000

,また、 JavaScriptが無効になる末尾があるようです。また、このメソッドを使用してJSON.stringify、リクエストをJSONに適切にシリアル化します。

function postForm() {
    var ret = $('#test').val();
    $.ajax({
        type: 'POST',
        url: '/demo',
        data: JSON.stringify({ name: ret }),
        contentType: 'application/json; charset=utf-8',
        success: function(result) {
            // do something iwth the result of the AJAX call here
        }
    });
}

ここで相対パス(url: '/demo')を使用して、同一生成元ポリシーに違反しないようにし、AJAXリクエストが同じドメインに送信されるようにしたことに注目してください。

一方、クロスドメインAJAX呼び出しを送信する必要がある場合は、サーバー側APIの変更を含むJSONP(GETリクエストのみに限定)または両方を使用するなど、いくつかの可能性があります。CORSサーバー側APIを制御できず、変更できない場合は、ドメインとの間のブリッジ/プロキシとして機能するサーバー側スクリプトをドメイン(このJavaScriptを含むHTMLページをホストしているもの)に作成する必要があります。リモートドメインを選択してから、AJAXリクエストをサーバー側スクリプトに送信します。

于 2013-03-17T12:58:08.953 に答える