4

私はこのようなajax json POSTメソッドを持っています

$.ajax({
    type: 'POST',
    url: "localhost:8080/webeditor/spring/json/", 
    data: JSON.stringify(contents),
    dataType: "json"
});

投稿リクエストを処理するコントローラー

JSONPObject json;
BindingResult result = new BeanPropertyBindingResult( json , "MyPresentation" );
@RequestMapping(value="json/", method = RequestMethod.POST)
public void savePresentationInJSON(Presentations presentation,BindingResult result) {
        //do some action

}

しかし、私はこのエラーが発生します

XMLHttpRequest は localhost:8080/webeditor/spring/json/ を読み込めません。クロス オリジン リクエストは、HTTP でのみサポートされています。

上記のエラーを修正する方法がわかりません。

4

6 に答える 6

5

私の最終作業バージョン

var jsonfile={json:JSON.stringify(contents)};
$.ajax({
    type: 'POST',
    url: "/webeditor/spring/json/", 
    data: jsonfile,
    dataType: "json"
});

AJAX、および

@RequestMapping(value = "/json/", method = RequestMethod.POST)
public void saveNewUsers( @RequestParam ("json") String json)
{
    System.out.println( json );
}
于 2012-07-06T18:38:08.380 に答える
2

Spring で JSON を渡すのはかなり簡単です。次の jQuery 関数を検討してください。

function processUrlData(data, callback) {
    $.ajax({
        type: "GET",
        url: "getCannedMessageAsJson.html",
        data: data,
        dataType: "json",
        success: function(responseData, textStatus) {
            processResponse(responseData, callback);
        },
        error : function(responseData) {
            consoleDebug("  in ajax, error: " + responseData.responseText); 
        }
    });
}

次の String @Controller メソッドを使用します...

@RequestMapping(value = "/getCannedMessageAsJson.html", method = RequestMethod.POST) 
public ResponseEntity<String> getCannedMessageAsJson(String network, String status, Model model) {

    int messageId = service.getIpoeCannedMessageId(network, status);
    String message = service.getIpoeCannedMessage(network, status);

    message = message.replaceAll("\"", "&quot;");
    message = message.replaceAll("\n", "");

    String json = "{\"messageId\": \"" + messageId 
    + "\", \"message\": \"" + message + "\"}"; 

    HttpHeaders responseHeaders = new HttpHeaders();
    responseHeaders.setContentType(MediaType.APPLICATION_JSON);
    return new ResponseEntity<String>(json, responseHeaders, HttpStatus.CREATED);
}

私の場合、リクエストは非常に単純であるため、コントローラー メソッドで json の書式設定を配線するだけですが、Jackson のようなライブラリを使用して json 文字列を生成することも簡単にできます。

また、他の人が述べているように、@RequestMapping の「値」が一意の正当なファイル名であることを確認してください。上に示した json メソッドを使用すると、対応する jsp ページを用意する必要はありません (実際には使用しません)。

于 2012-07-06T15:40:12.183 に答える
0

jQueryのように見えるので、試してみませんか

$.getJSON('webeditor/spring/json', JSON.stringify(contents, function(data) {//do callbackstuff});

クロスドメインをリクエストしたい場合、それを行う方法は次のようになります:-

cbFn = function(data) {
   // do callback stuff. 
}

    var ca = document.createElement('script');
                ca.type = 'text/javascript';
                ca.async = true;
                ca.src = server + '/webeditor/spring/json.jsonp?callback=cbFn';
                var s = document.getElementsByTagName('head')[0];
                s.parentNode.insertBefore(ca, s);

また、サーブレットマッピングを追加します

<servlet-mapping>
    <servlet-name>yourSevletName</servlet-name>
    <url-pattern>*.jsonp</url-pattern>
</servlet-mapping>
于 2012-07-06T16:35:32.240 に答える
0

アプリケーションには、URL パスの残りの部分に先行するコンテキスト ルートが必要です。またservlet-mapping、Spring コントローラーに送信されるリクエストを定義する web.xml も定義する必要があります。したがって、アプリケーションのコンテキスト ルートが「myapp」で、servlet-mapping*.html に移動する場合、ajax 呼び出しは次のようになります。

$.ajax({
    type: 'POST',
    url: "/myapp/webeditor/spring/json.html",
    data: JSON.stringify(contents),
    dataType: "json",
    success: function(response) {
        // Success Action
    }
}); 
于 2012-07-06T15:01:00.943 に答える
0

URL: url: "localhost:8080/webeditor/spring/json/"

webeditor は戦争名またはサービス名でなければならないので、@RequestMapping(value="/webeditor/spring/json/ "

通常、404 は、URL 要求が間違っているか、その URL に対してそのようなサービスが実行されていないことを意味します。

于 2012-07-06T13:40:09.820 に答える
-1

yr jsp に、タグ ライブラリを次のように含めます。

<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>

次に、春を使用して完全な URL を作成します

<c:url var="yourFullUrl" value="/webeditor/spring/json/" />

次に、これに基づいて JavaScript 変数を作成し、Ajax で使用できるようにします。

<script>
var yourUrl= '<c:out value="${yourFullUrl}"/>';
</script>

URL を表す javascript 変数を使用しない:

<script>
$.ajax({
        type: 'POST',
        url: yourUrl, 
        data: JSON.stringify(contents),
        dataType: "json"
});
</script>
于 2012-07-06T12:42:07.090 に答える