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のコードはこれです
ここに何が間違っているかに関するアイデアはありますか?ありがとう。
あなたのHTMLファイルは、ローカルパスにありますか?あなたのHTMLファイルのURLは何ですか? – Ammar
@Ammarはい、それは次のようなものです:C:/project/project/index.html - 名前にスペースを入れたものとしないものの2つの別々のパスを試しましたが、同じ結果が得られました.- – bremmS
JavaScriptコードでは、あなたのHTMLファイルがあるローカルパスにあることをQWebviewが予期していることを意味する 'url:heatQuery.php'を与えました。そこには存在するの?ローカルサーバーを実行している場合は、 "localhost:/path/to/heatQuery.php"のようにする必要があります。そうでなければ "www.website.com/path/to/heatQuery.php"。 – Ammar