2012-05-13 2 views
3

Я разрабатываю программу Qt, содержащую приложение OpenStreetMap, в виде HTML-страницы, и эта страница имеет доступ к базе данных -via, представляющей форму ajax, которая содержит даты начала и окончания запросов - для получения и визуализации запросов на карте. Я хотел бы переместить этот процесс запросов в Qt из части HTML/Javascript. До сих пор мне удалось взаимодействовать с браузером через Qt, но у меня все еще есть проблема, которая ниже:Qt Webkit - Взаимодействие с браузером

1) Нажмите кнопку запроса на выборку Qt и появится окно предупреждения, в котором говорится, что Ajax POST не удался - база данных не находится на моем текущем ноутбуке, и я должен получить ошибку, когда я нажимаю кнопку запроса на выборки окна браузера HTML или кнопку выборки Qt.

2) Но также, когда я нажимаю кнопку «Запросы на выборку» HTML-браузер, он отображает предупреждение POST, но также отображает дополнительные предупреждающие сообщения POST в зависимости от того, сколько раз я нажал кнопку Qt's Fetch queries. например, если я нажал кнопку запроса на выборку Qt 5 раз подряд, а затем один раз нажал кнопку выборки окна 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 формы заключается в следующем:

<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); 

} 

Любые идеи о том, что здесь не так? Благодарю.

+1

Вашего HTML-файл вы загружаете в QWebView находится на локальном пути? Я имею в виду, что URL вашего HTML-файла? – Ammar

+0

@Ammar да, это похоже на следующее: C: /project/project/index.html - Я пробовал два отдельных пути с пробелами и без них в именах, все равно получил тот же результат - – bremmS

+1

И в вашем javascript-коде вы 've given' url: heatQuery.php ', что означает, что QWebview ожидает, что он будет локальным путем, где находится ваш HTML-файл. Там он присутствует? Это должно быть что-то вроде «localhost: /path/to/heatQuery.php», если вы используете локальный сервер. В противном случае "www.website.com/path/to/heatQuery.php". – Ammar

ответ

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(); 

Надеется, что это помогает ..

+0

Я думал о возможной проблеме взаимодействия, подобной той, что прошлой ночью, по-видимому, это фактическая причина, как вы сказали. Просто запустил это тоже, просто назначив его строке и вызвав javaScript, но не получил никаких предупреждающих ящиков, несмотря на попытку нескольких комбинаций имен файлов. В вашем коде отсутствует правильная фигурная скобка для функции (e), но это также не было причиной. – bremmS

+0

@bremmS: О, да, это опечатка. Позвольте мне исправить .. – Ammar

+1

@bremmS: Убедитесь, что вы не получаете «Синтаксическую ошибку» в окне вывода приложения. Я думаю, это будет, если вы скопировали код выше (удаляете новые строки) и передали его на 'evaluationJavaScript()'. Я не знаю, почему он не может разобрать эту строку. Но я предлагаю вам определить функцию say 'test()' в HTML '