2

現在、ローカルホスト上の Rails サーバーと通信するための Ajax スクリプトを作成しようとしています (今のところ)。問題は、 $.ajax リクエストで「json」形式が必要であることを指定しているのに、Rails が「html」形式を返すことです。

$(document).ready(function(){

$('form').on("submit",function(){
    $.ajax({
        contentType: 'application/json; charset=utf-8',
        url : "http://192.168.0.36:3000/?value=10",
        type : "GET",
        dataType : 'JSON',
        success: function(data){
            alert(JSONParsedata(data));
        },
        error: function(XMLHttpRequest, textStatus, errorThrown)
        {
            alert(textStatus +", " +errorThrown);
        }
    });


    return false;
})

Rails サーバーのコンソール ログで、次の内容を確認できます。

HTML として WelcomeControllerindex による処理 ... 34ms で 200 OK を完了...

実際にサーバーから応答を受け取りますが、JSON ではなく HTML 形式です。

私は、welcomeController コード用の Rails コントローラーに次のものが含まれていることを正確に説明します。

 respond_to do |format|
  format.html
  format.json { render :json => @z }
end

z は、Ajax リクエストに送り返したい変数であり、以前に定義されています (わかりやすくするためにコードにライトを付けました)。

その結果、Jquery は結果を JSON 形式で解析し、完全なページの最初の文字に対応する : parsererror syntaxerror unexpected token '<' で終了しようとしています。

何時間も検索しましたが、これを解決する方法がわかりません。

ご助力ありがとうございます

4

5 に答える 5

3

ヘッダーを追加

'Accept: application/json'
于 2017-05-10T03:11:41.713 に答える
0

実際、私は今朝この問題を解決しました:

この方法は、Chrome などの基本的なブラウザーでは機能しましたが、私が使用しているアプリ IDE である "Rhomobile" では十分ではありませんでした (同じ Ajax 要求を使用していても!)。これを解決するために、リクエストにパラメータ「format」と値「json」(&format=json)を追加し、コントローラーに条件を追加しました:If the variable 'format' exists && format == 'json' then render結果をJSONに。それ以外の場合は、HTML でレンダリングされます。これは、Rhomobile と Browser の両方で機能します。

これが Rhomobile ではなく基本的なブラウザで機能した理由はわかりませんが、「クロスドメイン」リクエストが原因だと思います。(「rack-cors」サーバー側を使用しました)。今では両方で動作します。

お世話になった皆様、ありがとうございました。

于 2015-10-26T15:27:45.620 に答える