2016-05-08 5 views
0
document.getElementById('myform').addEventListener('submit', function (e) { 

// voorkomt de standaard actie van de submit 
e.preventDefault(); 
$(function() { 
    var artiest = document.getElementById("artiest"); 
    var rijen = document.getElementById("rij"); 
    var kolommen = document.getElementById("kolom"); 

    var CGIurl = 'http://localhost:8000/cgi-bin/schuifpuzzel.py?artiest=' + artiest.value + 
     "&rijen=" + rijen.value + "&kolommen=" + kolommen.value + "&callback=jsonp"; 

    $.ajax({ 
     type: 'GET', 
     url: CGIurl, 
     dataType: "jsonp", 
     success: function(data){ 
      console.log(data) 
     } 

    }); 

}); 
}); 

、ない呼び出されることはありません。だから私はeventListenerpreventDefaultを使った。AJAXコールバックは、私は<em>ボタン</em>が押されたときに提出する私のCGIスクリプトを実行するために、このAJAXを実行しようとしています大成功でもエラー

これらはJSONをレスポンスヘッダに

ブラウザでテストするとき、私は取得しています結果であるため、GETがうまく動作しているようだが、私が取得しようとしているものです。 何らかの理由で私のAJAXのsuccesやエラーが呼び出されたので、JSONにアクセスする方法がありません。

答えて

2

間違っている私が見ることができる二つあります:

  • JSON応答データは応答して送信されヘッダ、代わりに応答のをボディ
  • jQueryはJSONPリクエストを実行しています。つまり、応答が有効であることを意味するJavascript(JSONではありません)は、指定されたコールバック関数を呼び出す必要があります(jQueryは、したがって、successでもerrorコールバックも呼び出されません。

これを修正するかどうかは、JSONPが必要かどうかによって異なります。そうでない場合は、jsonをデータ型として使用し、JSONデータが応答本体にあることを確認してください。私が使用しています

jQueryXXX({ "content" : { "size" : ... } }); 

jQueryXXXcallbackクエリ文字列パラメータの値があるべき場所)

+0

:あなたがJSONPを必要がある場合は、あなたのCGIスクリプトは次のようになり、有効なJS応答を提供する必要があります私はそれが簡単にcorsの周りに得る方法だったと読んだのでjsonp。そして私はなぜデータがレスポンスヘッダに送られるのか分からないが、これをどのように修正するのか分からない。 – Joey

+1

@Joeyクロスドメイン境界を回避する必要がある場合は、おそらくJSONPを使用する必要があります。データがヘッダーの一部であるのは、ヘッダーと本文データの間に空白行があるためです。これはサーバの実装によりますが、これを実現する方法は異なりますが、JS文字列の前に改行を付加するだけで簡単に行うことができます。 – robertklep

+0

これで、1つの問題が修正されたので、応答にjsonが表示されるようになりました。私は 'uncaught SyntaxError:Unexpected token"を取得しています: "'それでもsucces/errorは決して呼び出されません。おそらく構文エラーのためでしょうか? – Joey

関連する問題

 関連する問題