我正在开发一个包含OpenStreetMap应用程序作为HTML页面的Qt程序,并且该页面能够访问数据库 - 通过提交包含查询的开始和结束日期的ajax表单 - 以便检索和可视化在地图上查询。我想将这个查询过程从HTML / Javascript部分移到Qt。到目前为止,我设法通过Qt与浏览器进行交互,但我仍然遇到以下问题:
1)单击Qt的fetch查询按钮,弹出一个警告框,说Ajax POST失败 - 数据库不在我当前的笔记本电脑上,当我点击HTML时我应该收到错误浏览器窗口的提取查询按钮或Qt的提取按钮 -
2)但是,每当我点击HTML浏览器的获取查询按钮时,它会显示POST警告,但也会显示额外的POST警告警告框,具体取决于我点击了Qt的Fetch查询按钮的次数。 - 例如,如果我连续5次单击Qt的提取查询按钮,然后单击HTML窗口的提取按钮一次,我连续收到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方法是:
<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代码是:
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);
}
关于这里有什么问题的任何想法?感谢。
答案 0 :(得分:3)
我想我遇到了问题。 XMLHttpRequest
成功加载了您的本地文件,但它在0
中返回request.status
,这就是为什么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();
希望这会有所帮助..