2012-05-13 17 views
3

OpenStreetMapアプリケーションをHTMLページとして含むQtプログラムを開発しています。このページは、クエリの開始日と終了日を含むajaxフォームを送信するデータベースにアクセスできます。マップ上のクエリを取得して視覚化するために使用します。私はこのクエリープロセスをHTML/Javascriptの部分からQtに移したいと思います。これまではQt経由でブラウザとやりとりをしていましたが、まだ以下の問題があります:Qt Webkit - ブラウザインタラクションの問題

1)Qtの[クエリの取得]ボタンがクリックされ、Ajax POSTが失敗したという警告ボックスが表示されます - データベースが現在のラップトップにないので、HTMLブラウザウィンドウの[クエリの取得]ボタンまたはQtのフェッチボタンをクリックしたときにエラーが発生するはずです。

2)しかし、また、 HTMLブラウザを使用すると、POST警告が表示されますが、QtのFetch queriesボタンを何回クリックしたかに応じてPOST警告警告ボックスが表示されます。たとえば、Qtのフェッチクエリボタンを5回クリックしてHTMLウィンドウのフェッチボタンを1回クリックした場合、6つのPOST失敗メッセージが連続して表示されます。

HTMLコードは次のとおりです。

<form id="ajaxForm" action="index.php" method="post"> 
Start <input type="text" name = "date1" id = "datepicker" value = "2011-07-13" style = "width:70px"> 
<input type="text" name = "time1" id = "timepicker1" value = "00:00" style = "width:40px"> 

End <input type="text" name = "date2" id = "datepicker2" value = "2011-07-13" style = "width:70px"> 
<input type="text" name = "time2" id = "timepicker2" value = "00:01" style = "width:40px"> 

AJAXフォームのPOSTメソッドはこれです:

void MainWindow::onButtonClicked() // clicking the button in order to POST 
{ 
    //the QString a is the same ajax post function as declared above 

    QString a = "$(document).ready(function(){$('#ajaxForm').submit(function() {$.ajax({type: 'POST',url: 'heatQuery.php',data: $(this).serialize(),dataType: 'json',success: function(response){updateHeatMap(response);},error: function(errorMsg){alert('Error in Ajax POST');}});return false;});});"; 

    this->view->page()->mainFrame()->evaluateJavaScript(a); 

} 

<script type="text/javascript"> 

$(document).ready(function(){ 

// ajaxForm submit 
$('#ajaxForm').submit(function() { 
    $.ajax({ 
    type: 'POST', 
    url: 'heatQuery.php', 
    data: $(this).serialize(), 
    dataType: 'json', 
    success: function(response) 
    { 
     // update the points for heatmap layer   
     updateHeatMap(response); 

    }, 
    error: function(errorMsg) 
    { 
     alert('Error in Ajax POST'); 
     } 
    }); 

    return false; 
}); 
}); 

</script> 

そして最後に、関数を呼び出すQtのコードはこれです

ここに何が間違っているかに関するアイデアはありますか?ありがとう。

+1

あなたのHTMLファイルは、ローカルパスにありますか?あなたのHTMLファイルのURLは何ですか? – Ammar

+0

@Ammarはい、それは次のようなものです:C:/project/project/index.html - 名前にスペースを入れたものとしないものの2つの別々のパスを試しましたが、同じ結果が得られました.- – bremmS

+1

JavaScriptコードでは、あなたのHTMLファイルがあるローカルパスにあることをQWebviewが予期していることを意味する 'url:heatQuery.php'を与えました。そこには存在するの?ローカルサーバーを実行している場合は、 "localhost:/path/to/heatQuery.php"のようにする必要があります。そうでなければ "www.website.com/path/to/heatQuery.php"。 – Ammar

答えて

3

私は問題があると思います。 XMLHttpRequestはあなたのローカルファイルを正常に読み込みますが、は、に0を返します。つまり、error()がjQueryコードから起動されます。私はQWebViewのコード例以下走っ

..このことができます

var request = new XMLHttpRequest(); 
request.open('POST', 'file:///C:/hello.txt', true); 

request.onreadystatechange = function(e) { 

    if(request.readyState == 4) 
    { 
     // 'responseText' will not be empty if file present.. 
     alert("response text: " + request.responseText); 
     alert("status: " + request.status); 
    } 
} 

request.send(); 

希望..あなたがQWebviewにロードしている

+0

私は昨晩のような相互作用の可能性があると考えました。あなたが言ったように、それは実際の原因です。これを単に文字列に割り当て、evaluateJavaScriptを呼び出すだけで、ファイル名のいくつかの組み合わせを試しても警告ボックスは表示されません。関数(e)のコードから右中括弧が欠けていますが、それも原因ではありませんでした。 – bremmS

+0

@bremmS:ああ、それはタイプミスです。私に訂正させてください.. – Ammar

+1

@bremmS:アプリケーション出力ウィンドウで「構文エラー」が表示されないことを確認してください。あなたが上のコードをコピーして(改行を削除し)、それを 'evaluationJavaScript()'に渡したとします。なぜ私はその文字列を解析できないのか分かりません。しかし、HTMLの '