How to make dynamic apps using Phonegap?

  • 2
  • Problem
  • Updated 6 months ago
Hi there, i am a student creating an app. But having some problems, i still cudn't found that what are the plugins and how we can use i used many from list but all they are not responding. Phonegap Team please help me i just want to create an app with camera(to capture images) and Call(to a particular number) how i can use them? I am using build.phonegap.com using dreamweaver. Thanks in advance. I also attached the screen shot of my app
Photo of Saba Rais

Saba Rais

  • 724 Posts
  • 3 Reply Likes

Posted 4 years ago

  • 2
Photo of Saba Rais

Saba Rais

  • 724 Posts
  • 3 Reply Likes
Petra, I checked Sir, backbutton event is working as expected on offline page, but at index page iit's not working on back button it's showing last visited page, not exiting. 


onOnline, onOffline and mybackButton callback should out from deviceready funtion?
(Edited)
Photo of Petra V.

Petra V., Champion

  • 7794 Posts
  • 1391 Reply Likes
Your code is correct.
However, how did you define your function 'exitApp'?
Is that function executed? Do you get a javascript error as soon as that function is called? Does it fail somewhere within that function? And where do you call navigator.app.exitApp?
Photo of Saba Rais

Saba Rais

  • 724 Posts
  • 3 Reply Likes
I didn't defined anywhere function exitApp, nor navigator.app.exitApp
I just used your code snippet .
Petra please tell me,, where i will defile it.
Photo of Petra V.

Petra V., Champion

  • 7794 Posts
  • 1391 Reply Likes
I just used your code snippet .
It was 'semi-code', remember? Not real code. It was just a piece of 'explanation' to show you along what lines it is done.

Have you looked up how to exit from an app in Android (doesn't work in iOS, anyway)?
Look, you must try and find solutions for these small, simple things yourself! You must learn that.
What if your app is live, and after a while, the client wants some changes? He expects you to be knowledgeable enough to do it....and I might not be around to hold your hand and do it for you.
Photo of Saba Rais

Saba Rais

  • 724 Posts
  • 3 Reply Likes
You are right always Petra, I must.
If I did yet, then I will do ahead too :) Thank you.
You are true Teacher. Perhaps therefore from beginning u didn't told me complete source code. :) By d way. It's u, who taught me all, even it's jquery, or javascript or php :) thankful to u 
(Edited)
Photo of Saba Rais

Saba Rais

  • 724 Posts
  • 3 Reply Likes
petra, wher i am doing mistake? 
<script>$(document).ready(function() {
document.addEventListener("offline", onOffline, false); 
document.addEventListener("online", onOnline, false);
document.addEventListener("backbutton", mybackButton, false);
document.addEventListener("deviceready", onDeviceReady, false); 
function onDeviceReady() { 
if(navigator && navigator.network && navigator.network.connection && navigator.network.connection.type == Connection.NONE) { 
$( ":mobile-pagecontainer" ).pagecontainer( "load", "offline.html", {transition:'flip' } );
}
var x = $('#maperror');
if (navigator.geolocation) {
navigator.geolocation.getCurrentPosition(showPosition, showError,{enableHighAccuracy: true, timeout: 20000}); 

else { 

$("#maperror").text("Geolocation is not supported by this browser."); 
}
function showPosition(position) {
$("#lat").val(position.coords.latitude);
$("#lon").val(position.coords.longitude);
var latlon =position.coords.latitude+","+position.coords.longitude;
var img_url = "http://maps.googleapis.com/maps/api/staticmap?mytimestamp="+new Date().getTime()+"&center="+latlon+"&zoom=18&size=220x220&sensor=false&markers="+latlon+"&size:mid%7Ccolor:0xff0000%7Clabel:%7Camroha,+uttar+pradesh&visual_refresh=true";
$("#mapholder").html("<img src='"+img_url+"'>");

function showError(error) { 
switch(error.code) { 
case error.PERMISSION_DENIED: 
$("#maperror").text("User denied the request for Geolocation."); 
break; 
case error.POSITION_UNAVAILABLE: 
$("#maperror").text("Location information is unavailable."); 
break; 
case error.TIMEOUT: 
$("#maperror").text("Google Map couldn't loaded, Please reload the page to get user location! Also Make sure you are outdoors."); 
break; 
case error.UNKNOWN_ERROR: 
$("#maperror").text("An unknown error occurred."); 
break; 

}

function onOnline() { 
// Only go back if user went to offline.html 
if ($.mobile.activePage[0].baseURI.indexOf("offline.html") > -1) { 
$.mobile.back(); 


function onOffline() { 
$( ":mobile-pagecontainer" ).pagecontainer( "change", "offline.html", {transition:'flip' } ); 
}
function mybackButton(e) {
if ($( ":mobile-pagecontainer" ).pagecontainer( "getActivePage" )[0].id=="page") {
exitAppPopup();
}
else if ($( ":mobile-pagecontainer" ).pagecontainer( "getActivePage" )[0].id=="offline") {e.preventDefault();}
}
function exitAppPopup() {
    navigator.notification.confirm(
          'Do you really want to exit from AmroClean?'
        , function(button) {
              if (button == 2) {
                  navigator.app.exitApp();
              } 
 else if(button ==1)
 {
history.back();  
 }
          }
        , 'Exit'
        , 'No,Yes'
    );  
    return false;
}
});
</script>
Photo of Petra V.

Petra V., Champion

  • 7794 Posts
  • 1391 Reply Likes
petra, wher i am doing mistake?

You want me to find a mistake, if any, in this part of your script?

Could you please describe what is going wrong, first?
- do you get an error message? If so, which one?
- does anything happen during the test, which you don't want to happen? If so, what?
- does anything not happen during the test, which you actually want to happen? If so, what?
- doesn't the app launch? does it freeze?
- does your device explode?
Photo of Saba Rais

Saba Rais

  • 724 Posts
  • 3 Reply Likes
Sorry 10x.
-No error i am getting.
-Script is not responding as I expected.
no no no

Popup is not showing, and page is still behaving like before, like these function has no effect on page.
Does exit app need some plugin? like cordova-plugin-exitapp?
(Edited)
Photo of Petra V.

Petra V., Champion

  • 7794 Posts
  • 1391 Reply Likes
Popup is not showing
Now, there is something.
So, navigator.notification.confirm() is apparently either not called, or not executed. You need to find out which one it is. Below is the line of thought you should master by now.

It is the first statement of this function:
function exitAppPopup()
So, the first question is: is that function executed or not?

The next question would be:
If not, is it called?
If it is executed, why does

navigator.notification.confirm() not execute?
Photo of Saba Rais

Saba Rais

  • 724 Posts
  • 3 Reply Likes
Good Morning Petra, New Morning New Hopes :) ^_^
I solved that problem yesterday, both are woeking now, e.g/ popup menu and backbutton evetns as I expected...........Thanks alot for your valuable suggestions :)
Now i m woking on:


petra, in this function, baduser and badpassword are variables?
(Edited)
Photo of Petra V.

Petra V., Champion

  • 7794 Posts
  • 1391 Reply Likes
No. Those are not variables.
And the html entity and html tag in the example make the code invalid.
Photo of Saba Rais

Saba Rais

  • 724 Posts
  • 3 Reply Likes
But this code is ur posted Petra, i just take a snap shot. Can u please repost correct one. 
Photo of Petra V.

Petra V., Champion

  • 7794 Posts
  • 1391 Reply Likes
Where did I post it?
Photo of Petra V.

Petra V., Champion

  • 7794 Posts
  • 1391 Reply Likes
You're right.

This would be correct

mail('admin@gmail.com','Script error', 'mysqli connect failed');
    $response_array[] = array('id'=>'systemErr','message'=>'mysqli connect failed');
(Edited)
Photo of Saba Rais

Saba Rais

  • 724 Posts
  • 3 Reply Likes
Good Day Petra,
Petra, what are baduser and badpassword?
Can't I use this function like:
if(!mysqli_connect())
{
mail('admin@gmail.com','Script error', 'mysqli connect failed');
    $response_array[] = array('id'=>'systemErr','message'=>'mysqli connect failed');
}

or

if(!mysqli_query())
{
mail('admin@gmail.com','Script error', 'mysqli connect failed');
    $response_array[] = array('id'=>'systemErr','message'=>'mysql query error');
}

??


And when we don't want to show these errors to users, then y we are showing through json array?

We well show an error page to them right?
(Edited)
Photo of Petra V.

Petra V., Champion

  • 7794 Posts
  • 1391 Reply Likes
Petra, what are baduser and badpassword?
Those are strings, representing a wrong userID and a wrong password. They are used in this example to force TRUE for the evaluation.

Can't I use this function like:
if(!mysqli_connect())
As long as you are working on localhost, with default userID, password and database, then yes. In a normal business situation, that is never the case, though.
Have you still not gone beyond the phase of using 'localhost' in a test environment?
Photo of Saba Rais

Saba Rais

  • 724 Posts
  • 3 Reply Likes
Petra, i uploaded my app on remote server, pick list is not populating.
although it's fetching data from database on remote server. But not in my app. what i do ?
see:@ remote sever:
http://amroclean.esy.es/
it's returning data also from server, i checked in app to check the status of a complaint
(Edited)
Photo of Petra V.

Petra V., Champion

  • 7794 Posts
  • 1391 Reply Likes
i uploaded my app on remote server
You did what?
The app is a client application. It should not be on a remote server, but rather installed in a mobile device.
Your server-side application (web service and database) should be at the remote server.
Photo of Saba Rais

Saba Rais

  • 724 Posts
  • 3 Reply Likes
Hello Teacher,
Now actually I understood how a dynamic website is differ from an hybrid app. So, Now i just delete all client side assets from  server, Now what i have on remote server: serverside assets and database with two tables. And my app I build it , and it's installed on my client mean phone.

Thanks alottttt. really
(Edited)
Photo of Saba Rais

Saba Rais

  • 724 Posts
  • 3 Reply Likes
Petra why dynamic list is not populating in mobile?
Photo of Petra V.

Petra V., Champion

  • 7794 Posts
  • 1391 Reply Likes
Which line of code fails to get executed?
Photo of Saba Rais

Saba Rais

  • 724 Posts
  • 3 Reply Likes
See: this is script i am using, it's working on localhost but not by remote host.
<script>
$.getJSON("compltype-data.php", function(return_data){
$.each(return_data.data, function(key,value){
$("#complaintlist").append("<option value=" + value.compltypeid +">"+value.description+"</option>");});
});
$('#complaintlist').change(function(){
//var st=$('#complaintlist option:selected').text();
var st=$('#complaintlist').val();
});
</script>

compltype-data.php

<?Php include_once('config.php'); // Database Connection
$sql="select  compltypeid, description from compltype where active='y' order by description asc"; 
$row=$dbo->prepare($sql);
$row->execute();
$result=$row->fetchAll(PDO::FETCH_ASSOC);
echo json_encode(array('data'=>$result));
?>
Photo of Petra V.

Petra V., Champion

  • 7794 Posts
  • 1391 Reply Likes
- Which line of code fails to get executed?
- Is the request sent successfully from the client?
- Is the request received by the server?
- Is a query sent to the database?
- Does the database return the correct values?
- Does the server get to the point that a reply is being returned?
- Is the json object filled correctly?
- Does the client receive that json object?
- Is the json object still filled correctly?
- Is the client's callback function executed properly?

Look, these are the steps you have to check one-by-one. That's how you debug such a process.
Once you find the problem, which can be anywhere within these steps, you must fix it.
Photo of Saba Rais

Saba Rais

  • 724 Posts
  • 3 Reply Likes
I will see okay all these steps, but i dont know why, it's populating in local database?
Photo of Petra V.

Petra V., Champion

  • 7794 Posts
  • 1391 Reply Likes
You might suspect that some whitelisting is wrong, then. You would find that issue once you check all above things. Most likely, already step-2 fails.
Alternatively, since you are using another database now, you might have no data in the database, or an sql query might fail.
(Edited)
Photo of Saba Rais

Saba Rais

  • 724 Posts
  • 3 Reply Likes
Whitelisting I have added already see:

And also server-client communication is already running.
<access origin="http://amroclean.esy.es"; subdomains="true" />
I didn't used another table for it. I just import it from local host to remote server. The same table is on server as localhost.
By d way yes I am testing now.
Photo of Saba Rais

Saba Rais

  • 724 Posts
  • 3 Reply Likes
Yeahhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh wooooooooooooooooooooooooooooooooooooooo Petraaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa



my app is complete now............ I did I did yes I did...............






of course with the help of u :D 











Thanks 
thnk u tooooooooooooooooooooooooo much 



I wiill always remeber u in my prayer :)
Photo of Petra V.

Petra V., Champion

  • 7794 Posts
  • 1391 Reply Likes
See?
Piece of cake.
Photo of Saba Rais

Saba Rais

  • 724 Posts
  • 3 Reply Likes
?
Photo of Saba Rais

Saba Rais

  • 724 Posts
  • 3 Reply Likes
I havn't words Petra, really, I never though that i can complete it. BUt with the help of you I could this. I tried and much tried and tried, many time i just wrong to know what is correct, everything is possible, nobody can make us loser, until we lose hope. But you, you are really a angel, you are human and always you behaved like a machine, which is very tough for a human being. Without any greed, u tought me everthing, even, whenever you found mistakes u alerted me, guide me, you are really a very good human :). 
Photo of Saba Rais

Saba Rais

  • 724 Posts
  • 3 Reply Likes
Petra where are you?
Photo of Saba Rais

Saba Rais

  • 724 Posts
  • 3 Reply Likes
Petra, now tell me that how i can use mail function? Can I keep it anywhere in the php script?
Photo of Petra V.

Petra V., Champion

  • 7794 Posts
  • 1391 Reply Likes
Do you want the user to use the device mail program, or do you want the server to send the mail?

If the former, create a 'mailto:' link (not recommended)
If the latter, create a form with user's mail address, subject and content. Then post the data to the server, let your web service send the mail, and return a json object with the result.
Photo of Saba Rais

Saba Rais

  • 724 Posts
  • 3 Reply Likes
Of course I don't want user send error email. I will use server side.
Petra, apart from this topic i want to ask something.....u saw i had knowledge of only html and css, and jquery mobile, javascript, ajax i learned here with you. I just don't want to die like all, i wanna do something. What is better for me? I want your guidance, it's my compulsion that i am creating this app, although i can do any hard work. But more than programming i like to create things of waste materials, from childhood i have a hobby to collect waste things and create something new. I wanna show u somepics, which are of my things i created with waste things, art and craft, in creativity i have lots of interest, but i unfortunately i can't earn money from this. So i stopped and jumped in computer teacher/operator. I also want to open a big IT institute here.  
 

Photo of Petra V.

Petra V., Champion

  • 7794 Posts
  • 1391 Reply Likes
Are these bike models? What size are they?
Photo of Saba Rais

Saba Rais

  • 724 Posts
  • 3 Reply Likes
Yes, Small, the green bike is near about 11x4 inch and another is 16x6 inch. I have more four bikes else, but i can create big one too. My car model i stopped to create due to duty. I have lots of material collected. A small thing too i don't waste i keep it in my collection. 
(Edited)
Photo of Saba Rais

Saba Rais

  • 724 Posts
  • 3 Reply Likes
Petra what about Publishing this app?
1. It's necessary if we want to use this app in android and windows phone only, to upload on google store? while it's small town? Can't we publish this app only by this qr code?

2. For ios supported app this is necessary to create certificates and after we can upload our app on apple store right?

3. Are signing keys and certificates still required if we are publishing this app only by that qr code?


Petra plz install my app in your phone, if it's not ios supported, the help option is still not completed. Today I wll do In Shaa Allah total complete. 

Photo of Petra V.

Petra V., Champion

  • 7794 Posts
  • 1391 Reply Likes
If you don't publish it in the stores:
- how do your users find the app?
- how do you keep statistics?
- how do your users know that there's an update to install?
- how are you going to create new test versions when updating, without releasing such version yet?

No, you're getting in trouble if you try to publish it outside the store as a test version. Besides, if I were the client/community, I would not accept that kind of release from the developer.

And yes, to publish it, you need certificates and you need to pay the Stores. But it's the client/community paying for it, not you, right?
Photo of Saba Rais

Saba Rais

  • 724 Posts
  • 3 Reply Likes
Petra, i wll reply of this post after,
1.First please tell me that, when i was using this database on localserver i set default value of datetime column to Current_Timestamp. So whenever i was inserting rows, it was showing current date and time.
Now when i m using another remote server. It's shpwing that invalid default value of datetime column 'current_timestamp'.
Then I tried to use now() function with query, it's also inserting a datetime but not current/ date is correct but time is wrong. How i can set correct time zone for it?


2. Also have another question, that whenever i will update database to change complaint status. How i can keep record of status updation date and time. Means how i can keep records separately when user filed a complaint and when i updated his status.?


Thank you sir. 
Photo of Petra V.

Petra V., Champion

  • 7794 Posts
  • 1391 Reply Likes
1. This may help, depending on what you are allowed to do on that mySql server:
https://blog.mozilla.org/it/2012/11/16/converting-timezone-specific-times-in-mysql/

2. I am not quite sure what you are asking here. What is "keeping record of status updation date and time"? Do you want to keep a copy of each occurrence of Complaint after each update? If so, you need to extend your data model.
Or do you just want a 'last updated' timestamp? If so, why?
Photo of Saba Rais

Saba Rais

  • 724 Posts
  • 3 Reply Likes
1. See i was  using this query to set default value of datetime.

ALTER TABLE `complaint` CHANGE `datetime` `datetime` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP;

2. If a user files a complaint at 2016-8-14 5:50:45.40, and we updated status at 2016-8-15 6:00:00.00 now my boss assign me a task to prepare a report in which i show how much time community took to solve the problem. Then what I will do?
Photo of Petra V.

Petra V., Champion

  • 7794 Posts
  • 1391 Reply Likes
1. I understand. But the current-timestamp depends on the server's machine time and the mySql server's configuration. It might not be your local time, it might have different dalight saving times, and it might be different from the app user's timezone.
That ALTER TABLE statement will not get you the timezone that you desire....if you know which 'current time' is correct in all cases, anyway.

2. You first tell your boss that such a report can't be made, because the application has not been set up to deliver the necessary data. Such statistisc were out of scope of his project.
Then you explain your boss that a requirements change for the application can be written, so that the application can be modified to serve this purpose. Of course, your boss should understand that he can only have reports of the Required Time-To-Handle for Complaints that were handled AFTER the application change has been developed, tested, accepted and released, because only such Complaints will have the necessary data.
Then , when he understands and accepts the above, you would develop the necessary changes, starting with the analyzation of his requirements.
For instance:
- does he want to have an average for all Complaints, or rather for specific Complaints? If the latter, what selection criteria need to be applied?
- does he want elapsed time in every single case? How is a change in DST to be treated, then (in other words: how much time elapsed between 8:10PM and 6:30AM the next morning, if a one-hour time shift was performed at 02:00AM?)
- would a paper report the next day be sufficient, or does he want the report to be available on his mobile phone 24/7?
- what exactly does he want to see for the selected Complaints? (This and the previous question should determine whether or not the update data are to be stored in the database, and whether or not the web service script must be modified).
Photo of Saba Rais

Saba Rais

  • 724 Posts
  • 3 Reply Likes
I got it, what u said. OK 
Yes, the server machine in New Delhi, and all the clients are here in Amroha, which far from New Delhi and of course time zone is also different. 


Amroha is small town/city, this app is only for citizen of Amroha, So what should i can use for current date and time? If i will not use currenttimestamp then what i do, if a user file complaint, the current time of amroha should insert?
Photo of Petra V.

Petra V., Champion

  • 7794 Posts
  • 1391 Reply Likes
Two options:
1. always store UTC in the database and convert from there to display correct times (whatever 'correct' is, and wherever it needs to be displayed)
2. Use the technique as outlined in the document I linked to an hour ago.

But before you pick an option, you first need to analyse what exactly needs to be displayed, when, where and for what purpose.
Photo of Saba Rais

Saba Rais

  • 724 Posts
  • 3 Reply Likes
OK. Thank You Petra.
Petra on slow connection dynamic list is not population but page is loading. I mean complaint.html page is showing. 
Is there any method by which we can show a message of "slow connection" while dynamic list is not populating?

2. How we can create multilingual pages with pgb and jqm?
Is there any plugin required?

Because, i want to make help page in Hindi, English and Urdu Language, but on page loading they are converting into weird symbols.
Photo of Petra V.

Petra V., Champion

  • 7794 Posts
  • 1391 Reply Likes
Is there any method by which we can show a message of "slow connection" while dynamic list is not populating?
Sure. Create a div around the select box. Then, also in that div, create a Paragraph with the text. Set a timeout of X seconds (whichever duration you like), and after that timeout, display the paragraph with the text, UNLESS meanwhile the list has populated.


How we can create multilingual pages with pgb and jqm?
This is a specific, large topic. Multilingual applications are difficult to set up. To start with, you need your content from the database set up in multiple languages. Then you need all error messages and image/button captions in multiple languages.
There is no plugin for that, you must redesign your database and webservices, create a process for the user to switch languages (and remember the chosen language) and act upon that.
Also, you need to make sure that the app itself is available in those languages in the App Stores, so you would create multiple introduction pages.
And what about the Help pages of your app? Should they be ,multilingual, too?

No, this would be way over your head. You should trust that your users will be able to translate, if necessary, themselves.

Because, i want to make help page in Hindi, English and Urdu Language, but on page loading they are converting into weird symbols.
What are 'weird symbols' Aren't they all part of UTF-8, then?
(Edited)
Photo of Saba Rais

Saba Rais

  • 724 Posts
  • 3 Reply Likes
Thanks alot Petra vrba :) .

No no no i dont want to feed data in database in multiple language, I also dont want server-client communication in multiple languages.  I just want a single static webpage written in  multi languages. Just to read easily instruction before using this app. 

See these symbols are showing. 
Photo of Petra V.

Petra V., Champion

  • 7794 Posts
  • 1391 Reply Likes
Should those strings be Ascii characters, regular Latin characters or something else?
And do you want the strings "Back" and "Help" translated, too?
Photo of Saba Rais

Saba Rais

  • 724 Posts
  • 3 Reply Likes
No, no no this is header of help page. There are three buttons on navigation bar in header. I don't want here translation. I will create three separate pages in different languages, i wll copy paste from google translate. 

see this:
<ul><li><a href="help_in_hindi.html">हिंदी</a></li>
<li><a href="help_in_urdu.html">اردو</a></li>
<li><a href="help_in_english.html">English</a></li>
</ul>
Photo of Saba Rais

Saba Rais

  • 724 Posts
  • 3 Reply Likes
it's done Petra, thank u. :)
Photo of Petra V.

Petra V., Champion

  • 7794 Posts
  • 1391 Reply Likes
OK.
Are these help texts local html pages, or does the text get imported from the server?

The point is that the most likely the character set and/or encoding is wrong somewhere. We need to find out where the mismatch is. Possibilities are, depending on how the texts get there:
- mySql table character set / encoding
- webserver defaults
- connection encoding
- html file mime type and encoding
- specification in the html file.
Photo of Saba Rais

Saba Rais

  • 724 Posts
  • 3 Reply Likes
Thank U. :)
I wanna ask again. for GOD sake tell me truth please
Are you really an internet bot?
Photo of Petra V.

Petra V., Champion

  • 7794 Posts
  • 1391 Reply Likes
I was designed as an internet bot in the early stages of the internet.
But then I failed the release tests, together with other bots. So, we were released from duty. Some of us were never further developed, while others, like me, started a career as independent bot for general purposes.

That's how I finally ended up here.
The sad part is that Phonegap is in the process of closing this forum down. They believe they had already done so at the end of June 2016 (according to the announcements on the front page of this board), but obviously, they aren't even good enough to do that decently.
Photo of Saba Rais

Saba Rais

  • 724 Posts
  • 3 Reply Likes
Petra, you are not bot. No
Photo of Saba Rais

Saba Rais

  • 724 Posts
  • 3 Reply Likes
:(
Photo of Saba Rais

Saba Rais

  • 724 Posts
  • 3 Reply Likes
Good Morning Petra, 
I have two dynamic links, in my Post Complaint page, when network is completely off. It's showing offline.html page, but when network is slow it's showing page but no data returned by server.
You suggested me that i should use setTimeout function to create a limited interval for pick list, but what about ajax request? On slow network it will not return data from server. 

I don't want to create only one function for only picklist. 
I want to make set a time.interval for whole page. I want to prevent page loading not only page is offline but when it's on slow network, How i do this?


Can i do like this?

function onDeviceReady() { if(navigator || navigator.network || navigator.network.connection || navigator.network.connection.type == Connection.NONE) { 
$( ":mobile-pagecontainer" ).pagecontainer( "load", "offline.html", {transition:'flip' } );
}

instead of:

function onDeviceReady() { if(navigator && navigator.network && navigator.network.connection && navigator.network.connection.type == Connection.NONE) { 
$( ":mobile-pagecontainer" ).pagecontainer( "load", "offline.html", {transition:'flip' } );
}

Can I use OR operator instead of AND ?



I checked some hybrid apps installed in my phone, on slow connection they are not loading pages and showing this message like offline.

Photo of Petra V.

Petra V., Champion

  • 7794 Posts
  • 1391 Reply Likes
Can I use OR operator instead of AND ?
Yes, but it means something different, then.
For instance, do you really want to evaluate "navigator.network.connection.type == Connection.NONE", if only 'navigator' is a defined object, but not 'navigator.network'?

I checked some hybrid apps installed in my phone, on slow connection they are not loading pages and showing this message like offline.
Yup. They are waiting for a while, and if there's still nothing, they display such message instead of whatever should normally get displayed.

But, but.....
I thought you said your app was finished, and you were preparing the release?
Photo of Saba Rais

Saba Rais

  • 724 Posts
  • 3 Reply Likes
Yes, because server-client communication was very important. That's y I said app is completed. But when i checked at different phone, when they have slow connection, dynamic list was not populating and also when we were submitting, it was showing an alert with posting failed. I felt bad.
Petra please tell me what I do?
Can't I prevent page loading untill not have proper network?
or when have bad connection can't I show network error or waiting for network or else?
Photo of Petra V.

Petra V., Champion

  • 7794 Posts
  • 1391 Reply Likes
Yes, you can. I told you how to use a timeout using javascript.
For instance, it's explained here:
http://stackoverflow.com/questions/5225597/set-timeout-for-ajax-jquery
Photo of Saba Rais

Saba Rais

  • 724 Posts
  • 3 Reply Likes
Petra how i can use, timeout in post method?

 function(data) {
for(var i = 0; i < data.length; i++){
$("#" + data[i].id).show();
$("#" + data[i].id).html(data[i].message);
}
$('#myForm').hide();
},"json").fail(function() {
         
alert("posting failed");             
});
 }
return false;


I mean where i can use timeout i googles but everywhere they explained only ajax...
Photo of Petra V.

Petra V., Champion

  • 7794 Posts
  • 1391 Reply Likes
Don't just Google. Read the official docs, that's what developers do.
http://api.jquery.com/jquery.ajax/
Photo of Saba Rais

Saba Rais

  • 724 Posts
  • 3 Reply Likes
Petra no where is written about $.post method everywhere they written about ajax both are equivalent but their syntax are different :(
(Edited)
Photo of Petra V.

Petra V., Champion

  • 7794 Posts
  • 1391 Reply Likes
$.post is not equivalent to $.ajax.  It is a form of the $.ajax function, which assumes some defaults. If you want to change those defaults, you need to use the $.ajax function, not $.post

Of course, you could encapsulate the $.ajax function, so you wouldn't really have to worry about its syntax more than once. You could write your own syntax in the custom method.
See for instance http://stackoverflow.com/questions/10009430/timeout-in-jquery-post-by-emulating-ajax

You aren't tied to using $.post, so if some change request come up which requires another method, you must be prepared to change the code, then retest the whole application.
Photo of Saba Rais

Saba Rais

  • 724 Posts
  • 3 Reply Likes
Petra are u ther? plz say if u r ther...
Photo of Petra V.

Petra V., Champion

  • 7794 Posts
  • 1391 Reply Likes
Sure.
Photo of Saba Rais

Saba Rais

  • 724 Posts
  • 3 Reply Likes
Thank uu u r here
Petra, i changed my post method into ajax
everything is posting into database but when we are posting with image it;s not posting blob image see what mistake i am doing: I will be highly thankful to u sir,,,.plz

var formData = {personname1: personname,
emailphn1: emailphn,
locationtxt1: locationtxt,
complaintlist1: complaintlist,
otherdescription1:otherdescription,
image1:image,
lat1:lat,
lon1:lon,
mycheck1:mycheck
        };
if (personname==null || personname=="")
{
$("#nameErr")
      .slideDown("fast",function(){
         $(this).delay(3000).slideUp("fast");
$('#personname').focus();
$('#personname').addClass("missing");
       });
return false;
}
if (emailphn== null || emailphn=="") {
            $("#emailErr")
       .slideDown("fast",function(){
          $(this).delay(3000).slideUp("fast");
 $('#emailphn').focus();
 $('#emailphn').addClass("missing");

       });
return false;
        }
if (!mailFormat.test(emailphn)) {
            $("#emailformatErr")
       .slideDown("fast",function(){
          $(this).delay(3000).slideUp("fast");
 $('#emailphn').focus();
 $('#emailphn').addClass("missing");

       });
return false;
        }
if((locationtxt==null || locationtxt=="") && !$("#mycheck").is(":checked"))
{
$("#locationErr")
       .slideDown("fast",function(){
          $(this).delay(3000).slideUp("fast");
 $('#locationtxt').focus();
 $('#locationtxt').addClass("missing");

       });
return false;
}
if(complaintlist==null || complaintlist=="")
{
$("#complaintlistErr")
       .slideDown("fast",function(){
          $(this).delay(3000).slideUp("fast");
 $('#complaintlist').focus();
 $('#complaintlist').addClass("missing");

       });
return false;
}
if(($('#complaintlist option:selected').text()=="Other") && (otherdescription==null || otherdescription==""))
{
$("#otherdescriptionErr")
       .slideDown("fast",function(){
          $(this).delay(3000).slideUp("fast");
 $('#otherdescription').focus();
 $('#otherdescription').addClass("missing");

       });
return false;
}

      else
 { 
 $('#contentTransition').show();
 $('#myForm').hide();
// Returns successful data submission message when the entered information is stored in database.
$.ajax({
            type        : 'POST', // define the type of HTTP verb we want to use (POST for our form)
            url         : 'http://www.acesabbasi.org/AmroClean/postcomplaintinfo.php', // the url where we want to POST
            data        : formData, // our data object
            dataType    : 'json', // what type of data do we expect back from the server
           timeout : 3000
        })
            // using the done promise callback
.done(function(data) {
for(var i = 0; i < data.length; i++){
$("#" + data[i].id).show();
$("#" + data[i].id).html(data[i].message);
}
$('#myForm').hide();
$('#contentTransition').hide();
$('#confirmation').show();
}).fail(function() {
         
alert("Posting failed.");             
});
 }
return false;
});
});

without image records are feeding in database but when using image with complaint not inserting rows in db...it's done when i use ajax instead of [post
Photo of Petra V.

Petra V., Champion

  • 7794 Posts
  • 1391 Reply Likes
- What is the contents of the variable 'image' in object formData?
- Do the image data arrive in your server side script? If not, why are you surprised that nothing is stored in your database?
Photo of Saba Rais

Saba Rais

  • 724 Posts
  • 3 Reply Likes
1. blob
2. except image everthing is storing in db

Petra plz tell me how i can store blob data in db by ajax plz

with image it;s showing posting failed and without image record in storing in db
(Edited)
Photo of Petra V.

Petra V., Champion

  • 7794 Posts
  • 1391 Reply Likes
You keep insisting on telling that the image is not storing in the database. But that is the very last step! Anything can go wrong before that last step.

If your script doesn't even receive image data, then of course it will not store the image.
If your app is not sending image data, then of course the server side script will not receive image data.
If your app doesn't prepare the image data in the proper variable 'image', then of course it will not send those data.

So you need to debug/test step-by-step.
Photo of Saba Rais

Saba Rais

  • 724 Posts
  • 3 Reply Likes
Thank you
Photo of Saba Rais

Saba Rais

  • 724 Posts
  • 3 Reply Likes
I used again post method instead of ajax and it's working fine for me, coz i could'n't found any bug in ajax request.
Photo of Saba Rais

Saba Rais

  • 724 Posts
  • 3 Reply Likes
Petra, please tell me something about more about signing keys and certificates..
-It's necessary to create signing keys and certificates for android and windows here at phonegap build forum?
-For apple we must create certificates and upload them at apple developer id  with payment right?
Before payment we can't even check that how our app is working on ios right?
Photo of Petra V.

Petra V., Champion

  • 7794 Posts
  • 1391 Reply Likes
In PGB, you create "Signing keys" for all platforms. This is done by uploading some files (certificates, provision files, etc) and assigning them a key name.
Those files can either be ceated yourself or must be requested and downloaded online. The procedure is different for each OS.
In order to publish, you must rebuild your app with a distribution/release certificate and you must have paid your developers fee to the Stores. For iOS, you also need a Mac to be able to publish the app.

It's all nicely documented:
http://docs.phonegap.com/phonegap-build/
See the signing section, which has tabbed pages for three platforms.
Photo of Saba Rais

Saba Rais

  • 724 Posts
  • 3 Reply Likes
Can i add same key for two separate platforms?
I created a keystore file which is I added on android, now i want to add a key for windows it's asking for Publisher ID....so what I do?

Before adding key in windows I must publish it?
(Edited)
Photo of Petra V.

Petra V., Champion

  • 7794 Posts
  • 1391 Reply Likes
In Windows, you get your Publisher ID from Microsoft, prior to registering your app.
So, you must first get a (paid) Microsoft dev account.
Photo of Saba Rais

Saba Rais

  • 724 Posts
  • 3 Reply Likes
Hi Petra, 
First of all I want to pay a special thanks to you, since beginning you are always here. I can't really forget your favors on me and special thanks to all pgb team.

I have some questions Petra, although you are always replying, but still want to request you. If have some time please reply.


1. I want any email id of Adobe PGB's support crew. Because this i want to delete this thread, i know as a user I can't delete it, but I will request them to delete this thread. For some privacy issues.

2. When we will upload this app on the store, (all stores are different for all different platforms?) , So whenever the developer will update his app, So he will hard code for update links at client side? or it's store's duty after every updation they will notify to user for new updation?

3. I saw some apps are giving bonus/money to their users, whenever they are speading their apps. What benefit they are getting whenever a user is installing their app? Are they earning from their apps if, then how? Have you any idea?

4. In my app i have added an option, to invite this app with friends, but I just added a download link of my app in pgb. How can i share directly apk file of my app?
(By giving the link of store, where app is uploaded?)

5. I also want to make some apps for schools, have you any app of any school for demo?


Thanks alot with respect Sir.
Photo of Petra V.

Petra V., Champion

  • 7794 Posts
  • 1391 Reply Likes
1. I have no mail address of PGB support. And because this forum is officially closed since June, they will most likely provide no support, anyway.
Besides, even if they deleted this thread, it would still be public on archive.org

2. Has your own device never alerted you of any app updates?
If it has: it will be the same for your app. You upload a new version, and the users will be notified. But...you must anticipate that they will not update, anyway.
If that could become problematic, you should develop a mechanism in the app, which allows you to disable older versions after warning the user. It's what I often do with the apps I develop.

3. There are all kinds of ways to monetize an app, ranging from displaying ads to selling in-app articles or collecting and selling data provided by users. Games, for instance, have an in-app shop, like race simulators or Pokemon Go.

4. Never, ever, give the URL of your app in PGB. Your users should not know your password, anyway, so they won't see what you see when you are logged in.
And you don't want users to download test versions that have not been finished, do you?

5. I have no demo apps, no. You should find such apps, download the apk and open it to view the source. BTW: that's how everyone can see your source, too. So be aware that you should never include confidential data in your assets!
Photo of Saba Rais

Saba Rais

  • 724 Posts
  • 3 Reply Likes
2. Like what's app, their developers don't allow their users to use old version, according to device's date and time, they show warning when they updated a new version that "You have an old version of whats app please download a new version." Untill unless we don't download, we can't use what's app old version too. Is that?


3. Hmm, Got it.

4. Yes, it's what I was thinking I dont wan't to share that url to users. I want to remove this option from the App. Instead of what option I can add? Since you know which type of app i have developed so can u please give a superb idea, by your robotic mind?

5. Ok


Thank You Petra Vrba :)
Photo of Petra V.

Petra V., Champion

  • 7794 Posts
  • 1391 Reply Likes
2. Exactly

4. I would create a real Share functionality for the hyperlink to the Store (which means you need to determine the platform, first, so you can link to the correct store), using this plugin:
https://www.npmjs.com/package/cordova-plugin-x-socialsharing
Photo of Saba Rais

Saba Rais

  • 724 Posts
  • 3 Reply Likes
4. Yes this plugin i am already using, only i will change url. I will change the URL of pgb testing app into google play or windows or ios store download link.

By the way, thanks alot again. 

Petra can you come India? to tell the IT students that what actually IT is? To motivate them? Please i am inviting you here from all IT students, who really want your life changing guidelines. Please.
(Edited)
Photo of Petra V.

Petra V., Champion

  • 7794 Posts
  • 1391 Reply Likes
No need to do so....you (should) have learned enough to guide them.
Photo of Saba Rais

Saba Rais

  • 724 Posts
  • 3 Reply Likes
They will not hear me, I am an ordinary student, I will organize a big seminar for all IT students only, when someone special come, If someone come from Adobe Co. They will definitely attend the seminar. I am again inviting/requesting you Petra, Please once come in India. I know that you are too much busy. Your work here is like worship. But If you will contribute here to give us a small time of your day. We can change the world really.
Photo of Saba Rais

Saba Rais

  • 724 Posts
  • 3 Reply Likes
Hi Petra, how are you?
I have a problem, 
I have created a display page to display database records, but images are not showing, can u please see what i am doing mistake?

It's retrieving all the data but not images...

<?php$con= mysqli_connect("localhost","root","","amroclean");
// Check connection
if (mysqli_connect_errno())
{
  echo "Connection Failed: " . mysqli_connect_error();
}
$sql = "SELECT *FROM complaint";
echo "<table border='1'>
<tr>
<th>Complaint Id</th><th>Person Name</th><th>Email/Phone</th><th>Location</th><th>Lat</th><th>Lon</th><th>CompltypeID</th><th>Other Description</th><th>Image</th><th>Status</th><th>Datetime</th><th>Complaint No.</th></tr>";
$result = mysqli_query($con, $sql);
if (mysqli_num_rows($result) > 0) {
    // output data of each row
    while($row = mysqli_fetch_assoc($result)) {
echo "<tr>";
echo "<td>".$row['ComplainID']."</td>";
echo "<td>".$row['peresonname']."</td>";
echo "<td>".$row['emailphn']."</td>";
echo "<td>".$row['locationtxt']."</td>";
echo "<td>".$row['lat']."</td>";
echo "<td>".$row['lon']."</td>";
echo "<td>".$row['compltypeid']."</td>";
echo "<td>".$row['otherdescription']."</td>";
echo "<td>".'<img src="data:image/jpeg;base64,'.base64_encode($row['image']).'" />'."</td>";
echo "<td>".$row['Status']."</td>";
echo "<td>".$row['datetime']."</td>";
echo "<td>".$row['ComplainNo']."</td>";
}
echo "</table>";

}
mysqli_close($con);
?>
Photo of Petra V.

Petra V., Champion

  • 7794 Posts
  • 1391 Reply Likes
You are using base64_encode(), although the stored data should already be in base64 format.
Photo of Saba Rais

Saba Rais

  • 724 Posts
  • 3 Reply Likes
Then how i can display?
Should i use base64_decode() instead of-
or
how?
Photo of Petra V.

Petra V., Champion

  • 7794 Posts
  • 1391 Reply Likes
If the data are in base64 format, you don't need either. Why would you want to reformat what is already correct?
Photo of Saba Rais

Saba Rais

  • 724 Posts
  • 3 Reply Likes
echo "<td>".'<img src="data:image/jpeg;base64,'.$row['image'].'"/>'."</td>";

if i am doing like this, pics still not showing
Photo of Petra V.

Petra V., Champion

  • 7794 Posts
  • 1391 Reply Likes
The code is correct, so the data might be wrong.
Photo of Saba Rais

Saba Rais

  • 724 Posts
  • 3 Reply Likes
1. So, how can i know, that my images in db are base encoded or not?
2. Is there any content type required in php display page?
3. In jquery' post method, Is there unique way to post base64 data into db?
(Edited)
Photo of Petra V.

Petra V., Champion

  • 7794 Posts
  • 1391 Reply Likes
A base64 encoded image is a text string. There's no special post method eequired.
There's no special content type required. text/html is fine.

Use an online base64 checker to see if your data are correct.
Photo of Saba Rais

Saba Rais

  • 724 Posts
  • 3 Reply Likes
data:image/jpeg;base64,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





uff i dont thik that it's a valid base64 encoded string?
Photo of Petra V.

Petra V., Champion

  • 7794 Posts
  • 1391 Reply Likes
Why not?
But if you store that prefix too, why do you add one when displaying? That makes it invalid.
Photo of Saba Rais

Saba Rais

  • 724 Posts
  • 3 Reply Likes
Solved, yes i was doing that mistake, i removed prefix and they are showing now :) Thank you Petra, :)
Photo of Saba Rais

Saba Rais

  • 724 Posts
  • 3 Reply Likes
Hi Petra, how are you?
I don't only remember you when i have query , :) 
I will remember you in my prayer, with lots of respect.
Photo of Saba Rais

Saba Rais

  • 724 Posts
  • 3 Reply Likes
Hi Petra,
How we can know that on the Internet we are talking to a human or Internet Bot?
Photo of Petra V.

Petra V., Champion

  • 7794 Posts
  • 1391 Reply Likes
Humans smile, or they look angry while typing.
Internet bots don't even type.

So, you just inspect the text closely, and check whether it was typed or not!
Photo of Saba Rais

Saba Rais

  • 724 Posts
  • 3 Reply Likes
I inspected the text closely, and found that You are a Human :) not an internet bot.
I saw that many time you text a smiley like :-) , and once when I wrote like this-Petraaaaaaaaaaa, u said don't shout, that means, you felt insulted. And Many time you wrote sign, when People ask something much basic.
Photo of Petra V.

Petra V., Champion

  • 7794 Posts
  • 1391 Reply Likes
The best internet bots are those that act like a human. They have been improved continuously after their first release, years ago.

How is your app doing?
Photo of Saba Rais

Saba Rais

  • 724 Posts
  • 3 Reply Likes
Hi Petra, 
Hope you're having a pleasant morning there. :)

My app is near about to launch Sir.
see it's new look
Photo of Saba Rais

Saba Rais

  • 724 Posts
  • 3 Reply Likes
But i am not fully satisfied with this app, I will update this app after first launch, with user login and registration system with next version. In Shaa Allah
(Edited)
Photo of Petra V.

Petra V., Champion

  • 7794 Posts
  • 1391 Reply Likes
What does "Check complaint status" do?
And how does the community handle those complaints in the back end?
Photo of Saba Rais

Saba Rais

  • 724 Posts
  • 3 Reply Likes
By this option users can check their complaint status, by default i set value "0" for status column in db. When they will solve the problem they will update the database and will set value 1 for solved problems. I codded like this, if problem is solved, users will get the message, problem has been solved and untill unless problem is not solved, they will get the message that problem is still in the progress.
and what can I make better?

2. Petra what was your first mobile app?
Photo of Petra V.

Petra V., Champion

  • 7794 Posts
  • 1391 Reply Likes
1. But...how do you know of which complaint you need the status?

2. My first app has been removed again. It was the app for a Dutch open university. The website is still there: vu-amstelland.de
Photo of Saba Rais

Saba Rais

  • 724 Posts
  • 3 Reply Likes
1. means? We will solve the problems which are booking day by day, and when we will solve problem completely, we will update our databases, and people can easily check their complaint's status. We have discussed it before right?

2. I saw website, did u designed and developed it?
Photo of Petra V.

Petra V., Champion

  • 7794 Posts
  • 1391 Reply Likes
1. What if 2 complaints are reported on a certain day? How does the complaint reporter get information on his complaint, and not on the other complaint?

2. I created the database, the backend, the multi language process, the payment interface, the integration with the accounting system, the statistics machine and a framework which allows the owner to create its own user interface.
Photo of Saba Rais

Saba Rais

  • 724 Posts
  • 3 Reply Likes
1. Than what i do Petra? Suggest me better please.
2. Good, what are your qualification?
Photo of Saba Rais

Saba Rais

  • 724 Posts
  • 3 Reply Likes
1. Than what i do Petra? Suggest me better please.
2. Good, what are your qualification?
Photo of Petra V.

Petra V., Champion

  • 7794 Posts
  • 1391 Reply Likes
1. I don't know how to suggest anything better, because I simply don't know how your app determines whaich complaint to show when a user taps that button. That's why I asked.
How do you currently determine which complaint is the complaint of this particular user, so that you won't show the wrong complaint? Surely, you won't show just any complaint, would you?

2. Internet bots don't need any qualifications. :-)
But the programmer who created me studied Information Technology and Mathematics in Amsterdam and Cambridge MA.
Photo of Saba Rais

Saba Rais

  • 724 Posts
  • 3 Reply Likes
Petra, when a user will file a complaint, he will got a unique 8 digits randomly generated number, he will remember this number, to check his complaint number, for example if a user registered a complaint with 78877675 complaint number, he can click "Check Complaint Status" button. If his complaint is still in the progress, he will get message: Dear Saba, You complaint is still in the progress, your patience is appreciated. And when an NPP employee will get report that particular problem has been solved with this unique number, he will quick update database with problem solved status, and after some time when user will check again, he can get message, Your problem is solved. Regards: NPP. This is the all process.

Who is your Programmer, can you tell me his full name?
Photo of Saba Rais

Saba Rais

  • 724 Posts
  • 3 Reply Likes
Petra, when a user will file a complaint, he will got a unique 8 digits randomly generated number, he will remember this number, to check his complaint number, for example if a user registered a complaint with 78877675 complaint number, he can click "Check Complaint Status" button. If his complaint is still in the progress, he will get message: Dear Saba, You complaint is still in the progress, your patience is appreciated. And when an NPP employee will get report that particular problem has been solved with this unique number, he will quick update database with problem solved status, and after some time when user will check again, he can get message, Your problem is solved. Regards: NPP. This is the all process.

Who is your Programmer, can you tell me his full name?
Photo of Saba Rais

Saba Rais

  • 724 Posts
  • 3 Reply Likes
Petra, when a user will file a complaint, he will got a unique 8 digits randomly generated number, he will remember this number, to check his complaint number, for example if a user registered a complaint with 78877675 complaint number, he can click "Check Complaint Status" button. If his complaint is still in the progress, he will get message: Dear Saba, You complaint is still in the progress, your patience is appreciated. And when an NPP employee will get report that particular problem has been solved with this unique number, he will quick update database with problem solved status, and after some time when user will check again, he can get message, Your problem is solved. Regards: NPP. This is the all process.

Who is your Programmer, can you tell me his full name?
Photo of Saba Rais

Saba Rais

  • 724 Posts
  • 3 Reply Likes
Petra, when a user will file a complaint, he will got a unique 8 digits randomly generated number, he will remember this number, to check his complaint number, for example if a user registered a complaint with 78877675 complaint number, he can click "Check Complaint Status" button. If his complaint is still in the progress, he will get message: Dear Saba, You complaint is still in the progress, your patience is appreciated. And when an NPP employee will get report that particular problem has been solved with this unique number, he will quick update database with problem solved status, and after some time when user will check again, he can get message, Your problem is solved. Regards: NPP. This is the all process.

Who is your Programmer, can you tell me his full name?
Photo of Saba Rais

Saba Rais

  • 724 Posts
  • 3 Reply Likes
Petra, when a user will file a complaint, he will get a unique 8 digits randomly generated number, he will remember this number, to check his complaint number, for example if a user registered a complaint with 78877675 complaint number, he can click "Check Complaint Status" button. If his complaint is still in the progress, he will get message: Dear Saba, You complaint is still in the progress, your patience is appreciated. And when an NPP employee will get report that particular problem has been solved with this unique number, he will quick update database with problem solved status, and after some time when user will check again, he can get message, Your problem is solved. Regards: NPP. This is the all process.

Who is your Programmer, can you tell me his full name?
Photo of Petra V.

Petra V., Champion

  • 7794 Posts
  • 1391 Reply Likes
OK. Great. When will the app be in the Play Store?

(My programmer never offered me a business card or even spoke an introduction. I just call that person My Programmer)
Photo of Saba Rais

Saba Rais

  • 724 Posts
  • 3 Reply Likes
In Shaa Allah soon you can see in the google app store.
Ok Petra, :)
What happened to this site? I am trying to post here since two days. But everytime it's going failed.
Photo of Petra V.

Petra V., Champion

  • 7794 Posts
  • 1391 Reply Likes
Don't know what happened. But it works now.
(Edited)
Photo of Saba Rais

Saba Rais

  • 724 Posts
  • 3 Reply Likes
Hi Petra Vrba,
How are you? Hope that You are well.

Kind Regards: Saba
Photo of Saba Rais

Saba Rais

  • 724 Posts
  • 3 Reply Likes
Hi Petra, How are you?
Happy Eid ul Azha :)
Photo of Petra V.

Petra V., Champion

  • 7794 Posts
  • 1391 Reply Likes
Happ Eid ul Azha, Saba (whatever that is...).
Photo of Saba Rais

Saba Rais

  • 724 Posts
  • 3 Reply Likes
Thanks You Petra :-)
What is Eid ul Azha or Eid ur Adha?
Eid al-Adha  "Festival of the Sacrifice"), also called the "Sacrifice Feast", is the second of two Muslim holidays celebrated worldwide each year, and considered the holier of the two. It honors the willingness of Ibrahim (Abraham) to sacrifice his son, as an act of submission to God's command, before God then intervened sending his angel Jibra'il (Gabriel) to inform him that his sacrifice had already been accepted. The meat from the sacrificed animal is divided into three parts. The family retains one third of the share; another third is given to relatives, friends and neighbors; and the remaining third is given to the poor and needy.
Photo of Petra V.

Petra V., Champion

  • 7794 Posts
  • 1391 Reply Likes
The family retains one third of the share; another third is given to relatives, friends and neighbors;

So, if those family, friends and neighbours also 'sacrifice' an animal and share one-third, your family and friends will have lots to eat at that party!
Photo of Saba Rais

Saba Rais

  • 724 Posts
  • 3 Reply Likes
Sacrifice an animal is not compulsory to everyone, Who, they are rich and can sacrifice animals, they should do. 
Yes, You are right, but we try to give to those people, who did not eat whole year good food, who can not sacrifice animals, we try to reach them and server them.
Photo of Saba Rais

Saba Rais

  • 724 Posts
  • 3 Reply Likes
Petra, can you tell me some ideas to create an unique app, means which is not build yet, tell me i will try, may it's impossible but tell me,,,,,,,,,,,,,,,,please. Thanks in advance
Photo of Petra V.

Petra V., Champion

  • 7794 Posts
  • 1391 Reply Likes
Lots of unique topics. For instance:
- an app that heals cancer
- an app that makes people able to fly
- an app that offers free fuel
- an app that makes espresso
- an app that brings peace in the World
- a lie detector
- an app that generates tastful recipes from random ingredients
- an app that proposes a good presidential candidate for the USA
- an app that generates unique apps.
Photo of Saba Rais

Saba Rais

  • 724 Posts
  • 3 Reply Likes
O wow, mind blowing really, So I will start now to create apps like this...umm from which app i can start first???
I think My second app should be "Peace" e.g. Peace in the World.

Thank You Petra to suggest really unique apps.
I will create them, I will
Photo of Petra V.

Petra V., Champion

  • 7794 Posts
  • 1391 Reply Likes
I think My second app should be "Peace" e.g. Peace in the World.
If you need someone to test it, I'll be happy to volunteer. If the test succeeds, the app won't even have to go live anymore, because the goal has then be reached already!
Photo of Saba Rais

Saba Rais

  • 724 Posts
  • 3 Reply Likes
Hi Petra,
Have a Nice Day.
I tried, I tried I thought a lot. How i can make peace in this world by just only an mobile app.......
And I found that..
I Can't make peace in this world, untill
race disconnected us, religion separated us, politics divided us , and wealth classified us...... :(
Photo of Petra V.

Petra V., Champion

  • 7794 Posts
  • 1391 Reply Likes
Correct.
So your new app should ban religion, eliminate politics and introduce strict socialism.
Race differences need not disappear, but should become invisible.
Can your first version of the app do that?

The second version should also destroy all weapons, eliminate corruption and please also stop diseases. Make country boundaries disappear and produce free chocolate and ice cream.
Photo of Saba Rais

Saba Rais

  • 724 Posts
  • 3 Reply Likes
So your new app should ban religion, eliminate politics and introduce strict socialism.
Race differences need not disappear, but should become invisible.
Can your first version of the app do that?

So You are saying that I should snatch people's hope?, How can I ban religion. If someone will give me a chance I can really change the world.
But not in this way.

Now you are really talking like a machine.
Photo of Petra V.

Petra V., Champion

  • 7794 Posts
  • 1391 Reply Likes
OK, OK,
Could you then please create an app that displays the current time and date?
Please pay attention to:
- the correct switch moment for Daylight Savings Time (and back)
- the correct time zone based upon the user's location
- the correct date switch for leap years
Photo of Saba Rais

Saba Rais

  • 724 Posts
  • 3 Reply Likes
Okay Petra, Surely I will try it after my first app launch.

Petra can you reply to this question.

Do you remember In my app I have created a offline page when network is absent.
Now my Boss wants I should use pending request while we are offline. He wants If a user is offilne he/she can fill the form and as soon as he have internet connection, request automatically sent. Is that possible?
Kind regards:Saba
Photo of Petra V.

Petra V., Champion

  • 7794 Posts
  • 1391 Reply Likes
Yes, that's possible.
So, your boss doesn't want the offline page? Or does he want the user to ONLY get to the form when offline and to no other page?
What does your boss want to happen if the user attempts to get to another page while offline?

Basically, when the user is offline and he gets to the form, you need to refrain from making an ajax request and instead store the data in localStorage.
Then, when the app is restarted or the app gets back online, you should first see if there is any data in localStorage. If so,
- prepare the ajax request with those data
- send the data
- on success, wipe out the data from localStorage
- then show the success page.

Now, what does your boss want to happen if a user fills out multiple forms (at different locations) while offline? Does he want to have those multiple form data stored temporarily?
If so, then you have several additional problems:
1. Upon getting back online, your script must process multiple ajax requests
2. After each request, you can only wipe out that part of the data that have been sent
3. localStorage is not large enough to store multiple pictures, so you need to keep those picture in the file system or in an IndexedDB database locally.
Photo of Saba Rais

Saba Rais

  • 724 Posts
  • 3 Reply Likes
Hi, Petra Vrba :) How are you?
Petra I made my app multiligual now, the client side i have finished and created hindi english and urdu pages, but now when i inserted data in compltype table, i have change charset by collation utf8_general_ci of two columns e.g. description_hindi and description_urdu, the data in inserting successfully in database, but when i am fetching it into dynamic picklist by json it's showing only question marks instead of each list item, what I am missing Petra?
Please Help, sorry I couldn't messaged i was too much busy since some days.
Photo of Saba Rais

Saba Rais

  • 724 Posts
  • 3 Reply Likes
Hi, Petra Vrba :) How are you?
Petra I made my app multiligual now, the client side i have finished and created hindi english and urdu pages, but now when i inserted data in compltype table, i have change charset by collation utf8_general_ci of two columns e.g. description_hindi and description_urdu, the data in inserting successfully in database, but when i am fetching it into dynamic picklist by json it's showing only question marks instead of each list item, what I am missing Petra?
Please Help, sorry I couldn't messaged i was too much busy since some days.
Photo of Petra V.

Petra V., Champion

  • 7794 Posts
  • 1391 Reply Likes
Hi Saba.
So, you have set utf8 at the source (the database table) and you are checking if it works at the end of the chain. There you notice a problem.

Many things happen in between. As always, my suggestion is to test and debug step by step.
You need to find out which application part and which code line causes this behaviour.
Photo of Saba Rais

Saba Rais

  • 724 Posts
  • 3 Reply Likes
Hi Petra Friend, yeah I solved it already It's looking more good now :) Thank You
Photo of Saba Rais

Saba Rais

  • 724 Posts
  • 3 Reply Likes
Hi Petra, Friend can u capture the following QrCode and check how is my App??
Now i made it Multilingual , all the UI messages and also Ajax returned data, in HIndi, English and Urdu language. :)
Please Please and Please install my app in android or windows and tell me how is it.......thank you Petra
(Edited)
Photo of Petra V.

Petra V., Champion

  • 7794 Posts
  • 1391 Reply Likes
OK, I did. And I registered a complaint, because the back button doesn't work on any page except index.
Also, I received a complaint number, but I couldn't check its status, because it said that the number doesn't exist.
Photo of Saba Rais

Saba Rais

  • 724 Posts
  • 3 Reply Likes
Thankew to Install the app and for feedback.
Petra I checked my database, but there is no any record inserted by your registration. Did you really got a confirmation message? I just file a complaint now and checked and it's inserted successfully. I am shocked that how could you got complaint registration number, when record is not updated.
See I just tried now with your name:

And if really this happened then tell me, on which deivce,version,os you checked?
and the second thing, yes the device back button is not working on those pages where i have set offline page, because i have killed the event for offline page but don't know why it's not working on online pages, well I will see it and I will resolve it.
Photo of Petra V.

Petra V., Champion

  • 7794 Posts
  • 1391 Reply Likes
I tried on a Motorola Razr I, Android 4.1.2

When filing a complaint, I received a 6-digit complaint number (not as long as the one in your image, but perhaps the number was cut off on display), beginning with 9. I don't remember that number anymore, and it's apparently not kept in localStorage, so the user is forced to remember that number :-(.

BTW: the Send button on the contact form is cut off on display, too, after receiving an error message.
BTW2: the splash screen disappears too early. I saw a white screen when the splash disappeared and before the first screen appeared. Took about 3 seconds. You should rather script the dismissal of the splashscreen instead of making it disappear automatically after a fixed number of seconds.
Photo of Saba Rais

Saba Rais

  • 724 Posts
  • 3 Reply Likes
1. Did u disabled javascript while file a complaint?
2. I set 8 digits in mt_random number, then how you got 6 digits number?
3. Did you really download the app from Qrcode, make sure, you have not any old version.
4. Is there anyway except sms, by user can save this complaint number? Option like save to drafts or other?

The Send button I will fix with footer, thanks
(Edited)
Photo of Petra V.

Petra V., Champion

  • 7794 Posts
  • 1391 Reply Likes
1. No
2. I can't tell. Perhaps the first two digits were zero, and you suppress leading zeroes
3. I used the QR code.
4. You could save the number in localStorage. User would at least have it on the same device, then. Make sure you can save multiple numbers, then. We have discussed this in this thread a long while ago.
Photo of Saba Rais

Saba Rais

  • 724 Posts
  • 3 Reply Likes
I don't know that how it's possible, since i have created this post complaint form, i didn't saw yet, the condition you are telling, even how much time i tried to file a complaint every time it's going successful, i don't know what i do now.
Secondly please Petra friend tell me some deeply about localstorage please.
Photo of Petra V.

Petra V., Champion

  • 7794 Posts
  • 1391 Reply Likes
Photo of Saba Rais

Saba Rais

  • 724 Posts
  • 3 Reply Likes
Thank You Petra Vrba :)
Photo of Saba Rais

Saba Rais

  • 724 Posts
  • 3 Reply Likes
Hi Petra How are you Friend?

1. If you are near about to leave this forum, please inform me, because, i want to connect with u here, and anywhere, please inform me before you go. 

2. I read all the documentation you show, So i have decided that I can give a small option "Save Complaint details" on json return page, e.g. user can save details of his complaint, complaint type, complaint number, date and time etc. A small app again with notepad, save , update, delete options i can provide, and this small app i can attach with page.


3. But last night I thought that How easy if I will a button on that page to save screen shot of return page?
With screen shot, user can also see date and time and also can memorize complaint number, Which option should I use, Which is easy to use for user?


Thank YOuuuuuuuuuuuuuuuuuuuuuu ^_^
(Edited)
Photo of Petra V.

Petra V., Champion

  • 7794 Posts
  • 1391 Reply Likes
Which is easy to use for user?
That depends, whether you want the user or the device to know the list of complaints.

If the user should have an overview of the status of his comlaints, then you need a user ID. The user should log in into your application and will then have an overview of the complaints which are registered for him. This list comes from the server and is available on every device where the user logs in.

If the device should have an overview of the status of its complaints, the technical solution is much easier and the user doesn't need to log in. However, in that case, the user won't have his complaints overview on other devices.

Which do you prefer?
Photo of Saba Rais

Saba Rais

  • 724 Posts
  • 3 Reply Likes
The best is I think user registration system, in this programming even user can easily see his profile, complaints, solved unsolved, and other

I have to redesign my database again right?


The screencapture is not good right? Because it's limited only for device.

Obviously  i want user know the list of complaint not device.
(Edited)
Photo of Saba Rais

Saba Rais

  • 724 Posts
  • 3 Reply Likes
But for this type of App, i have to use paid sms verification system to verify user phone number or email.
And lots of work and time, I want that for NOW i should use a simple option by which user can see that which complaint number was showing when he file a complaint......for ahead i can create the fully login app,, so that i can have a little time more......suggest me Petra please another way, By which user can memorize complaint number.....only complaint number
Photo of Petra V.

Petra V., Champion

  • 7794 Posts
  • 1391 Reply Likes
Well, then yes, you need an additional table 'Users' and a foreign key 'UserID' in the Complaints table. Your web service needs to do a join on both to get the user's complaint list.
You need a user registration function, a user login/logout function and a password retrieval function. Then you need a client-side login verification function at page switch.

Do you think you can do that?
Photo of Saba Rais

Saba Rais

  • 724 Posts
  • 3 Reply Likes
Yes, i can do it.
But not instantly, i have another duty which is for long time....
But since beginning this type of app i was wishing to create.
Thank You
Photo of Saba Rais

Saba Rais

  • 724 Posts
  • 3 Reply Likes
Petra call me there in denmark, i can learn from you...i can work under your guidance, only provide me salary for expenses.
Then when I will be perfect you can give me good salary... :p
Photo of Petra V.

Petra V., Champion

  • 7794 Posts
  • 1391 Reply Likes
Internet bots don't provide salary. They only provide answers in a forum.
Photo of Saba Rais

Saba Rais

  • 724 Posts
  • 3 Reply Likes
Hahhaha there is one answer to stop all my unnecessary questions, okay okay :D


Okay tell me please one thing



New ER Diagram for my App:
Users
______

UserId          int (PK)
Username    varchar
Address       varchar
Phone          int
Email            varchar
password     varchar
Complaints
__________
ComplaintId   int (PK)
UserID           int (FK) Reference to Users
Compltypeid  int (FK) Reference to Compltye
Locationtxt     varchar
lat
lon
Otherdescription
image
status
datetime


Compltype
_________
CompltypeId (pK)
Active enum(y/n)
description varchar.

?
Photo of Petra V.

Petra V., Champion

  • 7794 Posts
  • 1391 Reply Likes
Correct.
If you wish, you could add LastLogin (datetime) to user for statistic purposes. Also, you could add LastDatePasswordChanged (date) to force a password change every X months.
Photo of Saba Rais

Saba Rais

  • 724 Posts
  • 3 Reply Likes
Okay :) So my work starts now.....I will keep in your touch Petra, I hope that you really not a robot.

1. LastLogin Column should add in User table? Or which table?

and
2. LastDatePasswordChanged column in which table , or I should add another table to keep records of login and logout?
Photo of Petra V.

Petra V., Champion

  • 7794 Posts
  • 1391 Reply Likes
Those would be attributes of the User entity.
Photo of Saba Rais

Saba Rais

  • 724 Posts
  • 3 Reply Likes
Petra are you there right just now?
Photo of Petra V.

Petra V., Champion

  • 7794 Posts
  • 1391 Reply Likes
No, I'm not. It'll be another 10 hours.
Photo of Saba Rais

Saba Rais

  • 724 Posts
  • 3 Reply Likes
Petra, there is two updates need in my App, one is static map should be dynamic map they said, second, the app is little slow, while we are posting complaint with image, it's normal that while we are capturing or selecting an big image in size, it's taking few seconds to post, although when we are posting complaint without images, it's not taking time, within no time it's showing confirmation message.

1. For dynamic map, if I am taking a map in canvas, How I can save lat lon values of another points, means till now it was storing current position, How I will code for another location?

2. For images, the quality i have taken in js is 50 (quality:50), what should I do to make fast my app?
Photo of Petra V.

Petra V., Champion

  • 7794 Posts
  • 1391 Reply Likes
1. How is the other location to be determined? How does the user know what location he will have to enter?
And what do they consider a 'dynamic map'? What functional requirements do they have?

2. The speed depends mainly on the connection speed (upload) of the device, and you can't change that. Of course, you can try and reduce the quality, but otherwise, there's not much you can do.
Photo of Saba Rais

Saba Rais

  • 724 Posts
  • 3 Reply Likes
1. They want, that a google map will appear on page, and user place the marker where he want, then that marker position should be read by app in the form of lat and lon coordinates, then they should be store into hidden fields e.g. lat and lon input elements to store in db.
2. Ok Petra, thank you so much.
Photo of Petra V.

Petra V., Champion

  • 7794 Posts
  • 1391 Reply Likes
Photo of Saba Rais

Saba Rais

  • 724 Posts
  • 3 Reply Likes
Petra, whenever i am trying to use that map, an error is occurring..
SEe:
 
what I am doing mistake?
Am i using vanilla javascript? This is the reason?

<!DOCTYPE html><html>
  <head>
    <title>Simple click event</title>
    <meta name="viewport" content="initial-scale=1.0, user-scalable=no">
    <meta charset="utf-8">
    <style>
      html, body {
        height: 100%;
        margin: 0;
        padding: 0;
      }
      #map {
        height: 100%;
      }
    </style>
  </head>
  <body>
    <div id="map"></div>
    <script>
      function initMap() {
        var myLatlng = {lat: -25.363, lng: 131.044};

        var map = new google.maps.Map(document.getElementById('map'), {
          zoom: 4,
          center: myLatlng
        });

        var marker = new google.maps.Marker({
          position: myLatlng,
          map: map,
          title: 'Click to zoom'
        });

        map.addListener('center_changed', function() {
          // 3 seconds after the center of the map has changed, pan back to the
          // marker.
          window.setTimeout(function() {
            map.panTo(marker.getPosition());
          }, 3000);
        });

        marker.addListener('click', function() {
          map.setZoom(8);
          map.setCenter(marker.getPosition());
        });
      }
    </script>
    <script async defer
    src="https://maps.googleapis.com/maps/api/js?key=YOUR_API_KEY&callback=initMap">;
    </script>
  </body>
</html>
Photo of Petra V.

Petra V., Champion

  • 7794 Posts
  • 1391 Reply Likes
How did you whitelist the external source?
Photo of Saba Rais

Saba Rais

  • 724 Posts
  • 3 Reply Likes
No no not at phone, it's showing on PC, with chrome web browser. 
Having this type of problem with every map, not only for this coding.
Whenever I am seeling this map on websites, it's looking fine, but whenever i am trying in my app,  this is showing that error message. 
(Edited)
Photo of Petra V.

Petra V., Champion

  • 7794 Posts
  • 1391 Reply Likes
And did you substitute YOUR_API_KEY by your API key?
Photo of Saba Rais

Saba Rais

  • 724 Posts
  • 3 Reply Likes
Yes, now it's working fine....
Photo of Saba Rais

Saba Rais

  • 724 Posts
  • 3 Reply Likes
Petra now I used a dynamic map, and also add event on drag marker. It's also setting value of lat and lon to the hidden fields, and also working indoor :)
Photo of Petra V.

Petra V., Champion

  • 7794 Posts
  • 1391 Reply Likes
Great. Good job.
Photo of Saba Rais

Saba Rais

  • 724 Posts
  • 3 Reply Likes
<script>document.addEventListener("deviceready", onDeviceReady, false);
function onDeviceReady(){
document.addEventListener("backbutton", function(e) {
if ($( ":mobile-pagecontainer" ).pagecontainer( "getActivePage" )[0].id) {
e.preventDefault();
}
}, false);
}
</script>


Petra this script I am using at offline page to kill backbutton event. But This is not effective on back button.


But same script I used to exit from app on index page, so it's working as expected...what I am doing wrong?


I also tried like this:


<script>document.addEventListener("deviceready", onDeviceReady, false);
function onDeviceReady(){
document.addEventListener("backbutton", function(e) {
if ($( ":mobile-pagecontainer" ).pagecontainer( "getActivePage" )[0].id=="offline") {
e.preventDefault();
}
}, false);
}
</script>

But Not working as I expected, backbutton is working.
Photo of Petra V.

Petra V., Champion

  • 7794 Posts
  • 1391 Reply Likes
Do your evaluations return 'true'?

(You must first check which branch your script execution follows, because you want to find the root cause of the problem. Then correct that root cause - which is either the fact that the evaluations return differently from what you expect, or the e.preventDefault() doesn't have any effect on the back button's action, in which case you could try returning false, instead)
Photo of Saba Rais

Saba Rais

  • 724 Posts
  • 3 Reply Likes
Petra, see i made this script, now it's working as I expected, :)



document.addEventListener("deviceready", onDeviceReady, false);function onDeviceReady(){
document.addEventListener("backbutton", function(e) {
if ( $('.ui-page-active').attr('id') == 'index' || $('.ui-page-active').attr('id') == 'indexurdu' || $('.ui-page-active').attr('id') == 'indexhindi') {
exitAppPopup();
}
else if($('.ui-page-active').attr('id') == 'offline' || $('.ui-page-active').attr('id') == 'offlinehindi' || $('.ui-page-active').attr('id') == 'offlineurdu')
{
e.preventDefault();
}
else
{
 history.back(); 
}
}, false);
function exitAppPopup() {
    navigator.notification.confirm(
          'Do you really want to exit from AmroClean?'
        , function(button) {
              if (button == 2) {
                  navigator.app.exitApp();
              } 
 else if(button ==1)
 {
              
 
 }
          }
        , 'Exit'
        , 'No,Yes'
    );  
    return false;
}
}
Photo of Saba Rais

Saba Rais

  • 724 Posts
  • 3 Reply Likes
HI,
PETRA SEE , I WANT IF CONNECTION IS SLOW AND PAGE CAN'T LOAD INSTANTLY , A SLOW CONNECTION PAGE APPEAR WITH SLOW CONNECTION MESSAGE WITH RELOAD BUTTON. 

SO I WAS USING THIS CODING, BUT IT'S SHOWING ONLY ALERT, NOT SHOWING PAGE, WHAT I AM DOING WRONG?
<script type="text/javascript">
    var slowLoad = window.setTimeout( function() {
        alert( "the page is taking its sweet time loading" );
    }, 5000);

    window.addEventListener( 'load', function() {
        window.clearTimeout( slowLoad );
    }, false );
</script>

AND FOR PAGE...


<script type="text/javascript">
    var slowLoad = window.setTimeout( function() {
        $( ":mobile-pagecontainer" ).pagecontainer( "load", "SLOWCONNECTION.html", {transition:'flip' } );
    }, 5000 );

    window.addEventListener( 'load', function() {
        window.clearTimeout( slowLoad );
    }, false );
</script>
Photo of Petra V.

Petra V., Champion

  • 7794 Posts
  • 1391 Reply Likes
Why do you have two pieces of code?
Where is that first piece of code located?
How can you have the same variable for two different timeout handlers?
Photo of Saba Rais

Saba Rais

  • 724 Posts
  • 3 Reply Likes
Sir, the first part is to set the time for particular page after a specified period, and if page is taking time more than 5 seconds, it will show an alert/message, and the second part is for: to clear the timeout period if page is taking less time than 5 seconds, it will not show then alert.
Sir i had only one variable, eg. slowLoad, only.
Photo of Saba Rais

Saba Rais

  • 724 Posts
  • 3 Reply Likes
Petra,  i have  another query apart from this thread can you answer? :(
Photo of Petra V.

Petra V., Champion

  • 7794 Posts
  • 1391 Reply Likes
Sure: the answer is 'Life, the Universe and Everything', or 42.
Photo of Saba Rais

Saba Rais

  • 724 Posts
  • 3 Reply Likes
???What???


I was asking about my mother, she was suffering from Chikunguna, i was worry for her, because since one month she is suffering from joint pain, she is diabetic patient, which thing can cure/heal for her joint pain?, even she can't walk nicely now :(, when this joint paint will go?
(Edited)
Photo of Petra V.

Petra V., Champion

  • 7794 Posts
  • 1391 Reply Likes
Sorry to hear that. :-(

From the article you linked:
"There is no specific antiviral drug treatment for chikungunya. Treatment is directed primarily at relieving the symptoms, including the joint pain using anti-pyretics, optimal analgesics and fluids. There is no commercial chikungunya vaccine."
Photo of Saba Rais

Saba Rais

  • 724 Posts
  • 3 Reply Likes
It's Okay Petra, Why scientists still couldn't found any antiviral drug yet :(

She have no fever now, means virus is not in her body, but she have pain in joints...BTW thanks to reply even you can reply on this type of questions too :) You are really a good man, you should a muslim man. I will pray for her and for you too.
Thanks again
Photo of Saba Rais

Saba Rais

  • 724 Posts
  • 3 Reply Likes
Hi Petra, 
Can u tell me, what I do to show a dialog box with retry button, if ajax request is failed?
Photo of Petra V.

Petra V., Champion

  • 7794 Posts
  • 1391 Reply Likes
The easiest way would be a confirm() in javascript. You could also code a modal window.
Photo of Saba Rais

Saba Rais

  • 724 Posts
  • 3 Reply Likes
Petra i can create dialog box, what basically what is the code for this particular task?
.
.
.

function(data) { for(var i = 0; i < data.length; i++){
$("#" + data[i].id).show();
$("#" + data[i].id).html(data[i].message);
}
$('#myForm').hide();
$('#contentTransition').hide();
$('#confirmation').show();
},"json").fail(function() {
         
alert("Posting Failed, kindly click OK to retry");
What I do here???

 },
,
,
Can't I loop it to post method again????

Please Petra tell me detail, plz plz friend????

Thank YOu
(Edited)
Photo of Petra V.

Petra V., Champion

  • 7794 Posts
  • 1391 Reply Likes
1. This is not a confirm element:
alert("Posting Failed, kindly click OK to retry");
What should a user do if he doesn't want to try again? The only button is the OK butten.

2. You can loop with a while block, like

var retried = true;
while (retried) {
// your post functionality here
// set 'retried' to false once the post is successful
// use retried=confirm("once more?") on the fail callback function.
}
Photo of Saba Rais

Saba Rais

  • 724 Posts
  • 3 Reply Likes
Thank You Petra, One question more friend...
As u said that JQM is a single page architecture, What I did in my app, I have created all the pages externally, Now i am thinking to make this one page architecture, Can this make my page loading fast?


Or Multipage and External pages take same time to load data into DOM.?

Which is better?
Photo of Petra V.

Petra V., Champion

  • 7794 Posts
  • 1391 Reply Likes
jQM creates a one page architecture by replacing your links and use ajax to get to the next page. You don't need to change anything.

I thought you already started understanding that months ago...
Photo of Saba Rais

Saba Rais

  • 724 Posts
  • 3 Reply Likes
OK BOSS.
I think your duty time has been changed?
Photo of Saba Rais

Saba Rais

  • 724 Posts
  • 3 Reply Likes
Petra, see i was creating a confirm box...

},"json").fail(function() {
var retried=true;
retried=confirm(
          'Posting falied'
        , function(button) {
              if (button == 2) {
 //i will handle retry functionality here
              } 
 else if(button ==1)
 {
 // and I will handle cancel event here
 }
          }
        , 'Posting Failed, press 'Retry' to send your request again or 'Cancel ' to end request.
        , 'Cancel,Retry'
    );  
    return false;


});

It's showing box but with OK and cancel button....


2. I used ur steps you told me yesterday,,,,the while loop i think is not good for it. because i saw that 2335 record inserted in my db with same details.... i was shocked........
Photo of Petra V.

Petra V., Champion

  • 7794 Posts
  • 1391 Reply Likes
Luckily, this was just your test database and not the live database, so you can simply empty the database and start debugging.

If the confirm box only shows OK and Cancel, then the simplest solution would be to ask accordingly.
Photo of Saba Rais

Saba Rais

  • 724 Posts
  • 3 Reply Likes
Yes , I already truncate my original table, Now I am testing on test database.

Petra, tell me that, if request couldn't reached after n seconds, so how i can create retry functionality, and n nos. of attempt?Please.
(Edited)
Photo of Petra V.

Petra V., Champion

  • 7794 Posts
  • 1391 Reply Likes
Petra, tell me that, if request couldn't reached after n seconds, so how i can create retry functionality,
I already told you: use a while loop and flag indicating whether or not to retry. That's just a couple of more code lines, which I showed above.


and n nos. of attempt?
Is this the same 'n' as the number of seconds? Or is this a different 'n'?
Just curious: why would you limit the number of retries, if you want the user to be able to retry at all? And what do you want to happen if that number has been reached?
Photo of Saba Rais

Saba Rais

  • 724 Posts
  • 3 Reply Likes
1. Okay , Thank You Petra.
2. No , this was not same, it was no. of attempts, and yes, there is no need to make retry limited.
Thanks alot.
Photo of Saba Rais

Saba Rais

  • 724 Posts
  • 3 Reply Likes
Petra, where i will use while loop? in success function or fail function, i tried many time but i was failed, please Petra, tell me once more.............
:(( and why we are not using any counter........................
(Edited)
Photo of Saba Rais

Saba Rais

  • 724 Posts
  • 3 Reply Likes
2. You can loop with a while block, like

var retried = true;
while (retried) {
// your post functionality here
// set 'retried' to false once the post is successful
// use retried=confirm("once more?") on the fail callback function.

// PETRA what is do here


retried=confirm('Posting falied'        , function(button) {
              if (button == 2) {
HERE???????????????????? what i do here
 }
 else if(button ==1)
 {
$.mobile.back();  
 }
          }
        , 'Posting Failed, press Retry or Cancel'
        , 'Cancel,Retry'
    );  
}

I tried like this, but in that situation data is inserting in db repeatedly, untill page is not closing.
(Edited)
Photo of Petra V.

Petra V., Champion

  • 7794 Posts
  • 1391 Reply Likes
but in that situation data is inserting in db repeatedly...

...which means that the condition for the while loop isn't getting the value 'false'.
Have you checked the value of 'retried' at the start of each iteration? How else did you debug your problem?

Again, you seem to write a bunch of code, test the whole chunk based upon its output, and if the output is not what you expected, you stop your test.
But, in fact, that's the point where you should start debugging. Analayze your code, see where the different branches start under a certain condition and then display the value of the variables in the conditions so you know what exactly is going wrong.
Photo of Petra V.

Petra V., Champion

  • 7794 Posts
  • 1391 Reply Likes
The while loop contains the whole process, because you want that process to be repeated.

do {
- ajax-function POST
- success: set retried to false
- fail: set retried to confirm-value
}
while (retried)
Photo of Saba Rais

Saba Rais

  • 724 Posts
  • 3 Reply Likes
petra, both scripts are doing same..
see


Is this correct?

do{
$.post("http://localhost/AmroClean/postcomplaintinfo.php";, {
personname1: personname,
emailphn1: emailphn,
locationtxt1: locationtxt,
complaintlist1: complaintlist,
otherdescription1:otherdescription,
image1: image,
lat1:lat,
lon1:lon,
mycheck1:mycheck
}, function(data) {
retried=false;
for(var i = 0; i < data.length; i++){
$("#" + data[i].id).show();
$("#" + data[i].id).html(data[i].message);
}
$('#myForm').hide();
$('#contentTransition').hide();
$('#confirmation').show();
},"json").fail(function() {
retried=true;
retried=confirm('Once more?');          
});}
while(retried);
 }
 
return false;

});

});


When  request is going successful , it's showing returned data, but when going fail it's not confirming again...
(Edited)
Photo of Petra V.

Petra V., Champion

  • 7794 Posts
  • 1391 Reply Likes
Are you making sure that variable 'retried' has a global scope?
Photo of Saba Rais

Saba Rais

  • 724 Posts
  • 3 Reply Likes
.
.
.
.<script>$(document).ready(function() {
$('#contentTransition').hide();
$("#postcomplaint").click(function() {
var personname = $("#personname").val();
var emailphn = $("#emailphn").val();
var locationtxt = $("#locationtxt").val();
var complaintlist = $("#complaintlist").val();
var otherdescription=$("#otherdescription").val();
var image = $('#smallImage').attr('src');
var mycheck=$('#mycheck').val();
var lat=$("#lat").val();
var lon=$("#lon").val();
var retried;
.
.
.
. i think yes.
Photo of Saba Rais

Saba Rais

  • 724 Posts
  • 3 Reply Likes
Petra, tell me please if that coding is correct. Please
Photo of Petra V.

Petra V., Champion

  • 7794 Posts
  • 1391 Reply Likes
I don't know.
Lately, you are posting code snippets, of which none are valid.

In this case, I don't see any closing tags or brackets for the bold parts:

<script>$(document).ready(function() {
$('#contentTransition').hide();
$("#postcomplaint").click(function() {

so no, this code is not correct.
Photo of Saba Rais

Saba Rais

  • 724 Posts
  • 3 Reply Likes
Okay Petra, Now i am posting full coding, see:
<script>$(document).ready(function() {
$('#contentTransition').hide();
$("#postcomplaint").click(function() {
var personname = $("#personname").val();
var emailphn = $("#emailphn").val();
var locationtxt = $("#locationtxt").val();
var complaintlist = $("#complaintlist").val();
var otherdescription=$("#otherdescription").val();
var image = $('#smallImage').attr('src');
var mycheck=$('#mycheck').val();
var lat=$("#lat").val();
var lon=$("#lon").val();
var retried;
var mailFormat = /^([a-zA-Z0-9_\.\-])+\@(([a-zA-Z0-9\-])+\.)+([a-zA-Z0-9]{2,4})|([7-9]{1}[0-9]{9})+$/;
if (personname==null || personname=="")
{
$("#nameErr")
      .slideDown("fast",function(){
         $(this).delay(3000).slideUp("fast");
$('#personname').focus();
       });
return false;
}
if (emailphn== null || emailphn=="") {
            $("#emailErr")
       .slideDown("fast",function(){
          $(this).delay(3000).slideUp("fast");
 $('#emailphn').focus();

       });
return false;
        }
if (!mailFormat.test(emailphn)) {
            $("#emailformatErr")
       .slideDown("fast",function(){
          $(this).delay(3000).slideUp("fast");
 $('#emailphn').focus();

       });
return false;
        }
if((locationtxt==null || locationtxt=="") && !$("#mycheck").is(":checked"))
{
$("#locationErr")
       .slideDown("fast",function(){
          $(this).delay(3000).slideUp("fast");
 $('#locationtxt').focus();

       });
return false;
}
if(complaintlist==null || complaintlist=="")
{
$("#complaintlistErr")
       .slideDown("fast",function(){
          $(this).delay(3000).slideUp("fast");
 $('#complaintlist').focus();

       });
return false;
}
if(($('#complaintlist').val()==11) && (otherdescription==null || otherdescription==""))
{
$("#otherdescriptionErr")
       .slideDown("fast",function(){
          $(this).delay(3000).slideUp("fast");
 $('#otherdescription').focus();

       });
return false;
}

      else
 { 
 $('#contentTransition').show();
 $('#myForm').hide();
 $('#postcomplaint').hide();
 $('#footer').hide();
// Returns successful data submission message when the entered information is stored in database.
do
{
$.post("http://www.acesabbasi.org/AmroClean/postcomplaintinfo.php";, {
personname1: personname,
emailphn1: emailphn,
locationtxt1: locationtxt,
complaintlist1: complaintlist,
otherdescription1:otherdescription,
image1: image,
lat1:lat,
lon1:lon,
mycheck1:mycheck
}, function(data) {
retried=false;
for(var i = 0; i < data.length; i++){
$("#" + data[i].id).show();
$("#" + data[i].id).html(data[i].message);
}
$('#myForm').hide();
$('#contentTransition').hide();
$('#confirmation').show();
},"json").fail(function() {
retried=true;
retried=confirm('Once more?');          
});}
while(retried);
 }
 
return false;

});

});

 </script>

Now tell me please, if this correct or incorrect.Please?
(Edited)
Photo of Petra V.

Petra V., Champion

  • 7794 Posts
  • 1391 Reply Likes
This looks like a syntax error:

$.post("http://www.acesabbasi.org/AmroClean/postcomplaintinfo.php";, {

Don't you get a javascript message in your console while testing?
Photo of Saba Rais

Saba Rais

  • 724 Posts
  • 3 Reply Likes
Petra you forgot??? It's not in my PC this error, when we post in this forum, this semi colon automatically add in code.

You also checked before some days ago.
Photo of Petra V.

Petra V., Champion

  • 7794 Posts
  • 1391 Reply Likes
OK. Then it look correct to me.
Does the .fail callback get called at all? If so, what is the value of the confirm after clicking 'OK'?
Photo of Saba Rais

Saba Rais

  • 724 Posts
  • 3 Reply Likes
I just changed posting URL to check, if .fail callback is calling, yes it's calling and also showing a confirmation box with OK and Cancel buttons, But when I am clicking on OK button, it's not showing again confirmation box.
Photo of Petra V.

Petra V., Champion

  • 7794 Posts
  • 1391 Reply Likes
what is the value of the confirm() after clicking OK?
Photo of Saba Rais

Saba Rais

  • 724 Posts
  • 3 Reply Likes
Nothing.

Petra, I didn't gave any value to Ok or Cancel button.

If I use this function for button events, then I can handle them with loop?

, function(button) {              if (button == 2) {
               
              } 
 else if(button ==1)
 {
   
 }
          }
Photo of Petra V.

Petra V., Champion

  • 7794 Posts
  • 1391 Reply Likes
Nothing.
The return value of a confirm() can't be nothing. However, if it really is, then something is very wrong in your test device.
Photo of Saba Rais

Saba Rais

  • 724 Posts
  • 3 Reply Likes
Okay then I will check it again, thank you very much to present always here. 
Photo of Saba Rais

Saba Rais

  • 724 Posts
  • 3 Reply Likes
<script>$(document).ready(function() {
$('#contentTransition').hide();
$("#postcomplaint").click(function() {
var personname = $("#personname").val();
var emailphn = $("#emailphn").val();
var locationtxt = $("#locationtxt").val();
var complaintlist = $("#complaintlist").val();
var otherdescription=$("#otherdescription").val();
var image = $('#smallImage').attr('src');
var mycheck=$('#mycheck').val();
var lat=$("#lat").val();
var lon=$("#lon").val();
var retried;
var mailFormat = /^([a-zA-Z0-9_\.\-])+\@(([a-zA-Z0-9\-])+\.)+([a-zA-Z0-9]{2,4})|([7-9]{1}[0-9]{9})+$/;
if (personname==null || personname=="")
{
$("#nameErr")
      .slideDown("fast",function(){
         $(this).delay(3000).slideUp("fast");
$('#personname').focus();
       });
return false;
}
if (emailphn== null || emailphn=="") {
            $("#emailErr")
       .slideDown("fast",function(){
          $(this).delay(3000).slideUp("fast");
 $('#emailphn').focus();

       });
return false;
        }
if (!mailFormat.test(emailphn)) {
            $("#emailformatErr")
       .slideDown("fast",function(){
          $(this).delay(3000).slideUp("fast");
 $('#emailphn').focus();

       });
return false;
        }
if((locationtxt==null || locationtxt=="") && !$("#mycheck").is(":checked"))
{
$("#locationErr")
       .slideDown("fast",function(){
          $(this).delay(3000).slideUp("fast");
 $('#locationtxt').focus();

       });
return false;
}
if(complaintlist==null || complaintlist=="")
{
$("#complaintlistErr")
       .slideDown("fast",function(){
          $(this).delay(3000).slideUp("fast");
 $('#complaintlist').focus();

       });
return false;
}
if(($('#complaintlist').val()==11) && (otherdescription==null || otherdescription==""))
{
$("#otherdescriptionErr")
       .slideDown("fast",function(){
          $(this).delay(3000).slideUp("fast");
 $('#otherdescription').focus();

       });
return false;
}

      else
 { 
 $('#contentTransition').show();
 $('#myForm').hide();
 $('#postcomplaint').hide();
 $('#footer').hide();
// Returns successful data submission message when the entered information is stored in database.
do
{
$.post("http://www.acesbbasi.org/AmroClean/postcomplaintinfo.php";, {
personname1: personname,
emailphn1: emailphn,
locationtxt1: locationtxt,
complaintlist1: complaintlist,
otherdescription1:otherdescription,
image1: image,
lat1:lat,
lon1:lon,
mycheck1:mycheck
}, function(data) {
retried=false;
for(var i = 0; i < data.length; i++){
$("#" + data[i].id).show();
$("#" + data[i].id).html(data[i].message);
}
$('#myForm').hide();
$('#contentTransition').hide();
$('#confirmation').show();
},"json").fail(function() {
retried=true;
retried=confirm('Once more?'

,function(button) {
              if (button == 2) 
 {

Petra what i do here?
              } 
 else if(button ==1)
 {
    
 }
          }
        , 'Posting failed!'
        , 'Cancel,Retry');          
});}
while(retried);
 }
 
return false;

});

});

 </script>
Photo of Petra V.

Petra V., Champion

  • 7794 Posts
  • 1391 Reply Likes
I wouldn't know, since I don't understand why you would check on button values at all.
You should check the confirm()'s return value and act upon that.

retried=confirm('Once more?');
should be sufficient to leave the while iteration or stay and loop once more. Why else would you use the 'retried' variable and the 'do...while(retried)' construction?
Photo of Saba Rais

Saba Rais

  • 724 Posts
  • 3 Reply Likes
Hi Petra Vrba, How are you? :-)
Photo of Saba Rais

Saba Rais

  • 724 Posts
  • 3 Reply Likes
Hi Petra, where you gone? How are you there?

I am 
Saba Rais
Photo of Saba Rais

Saba Rais

  • 724 Posts
  • 3 Reply Likes
Hi Petra where you gone? :(
Why you are not replying.


Petra, Why this variable showing undefined?

function justforcheck() {
    var retried;

    $.post({
        url: '...',
        success: function(response) {
            retried = true;
        }
    });

    
}
alert(retried); // It always ends up being `undefined`.


Photo of Petra V.

Petra V., Champion

  • 7794 Posts
  • 1391 Reply Likes
That's because it only has local scope. You either need to give it global scope, or alert its value within the scope of the function.
Photo of Saba Rais

Saba Rais

  • 724 Posts
  • 3 Reply Likes
:) I knew it, but i was looking up for your reply, thank you for always being here.
Photo of Saba Rais

Saba Rais

  • 724 Posts
  • 3 Reply Likes
Petra Hi
Hope that you are good.
I know that you will not reply of my non-sense questions.
See i want to create an app for my city.
That is e-wallet.
I want to make my city Cashless.
So, should I start with my city of for whole India?
Here 500 and 1000 notes are banned since 8 Nov. In future we will completely cash less. So I was thinking to create app like this. 
Suggest me better thank you Petra.
Photo of Petra V.

Petra V., Champion

  • 7794 Posts
  • 1391 Reply Likes
How should people pay, if they don't have a cell phone? What if they have a device you don't support?
How are you going to ensure data security?

This would be way over your head.
Photo of Saba Rais

Saba Rais

  • 724 Posts
  • 3 Reply Likes
Dear Petra you are always right. Really this is over my head. I can't play with people's money. It's a huge project also a team work. Now I will assign this task to an IT Company. 
Thanks for your suggestions :)

And your question that how can people pay if they haven't device your app supported.
If we are unable to make whole city cash less doesn't matter , we can make partially initially, Our PM wants to make India digital, so they have many campaigns running to make India digital, also some political parties announced to distribute smart phones to public. So if not now, we can make whole city cash less in  future In Shaa Allah.
(Edited)
Photo of Saba Rais

Saba Rais

  • 724 Posts
  • 3 Reply Likes
Petra, where are you and how are you?
Photo of Saba Rais

Saba Rais

  • 724 Posts
  • 3 Reply Likes
Petra where u gone? How are you there? 
Photo of Saba Rais

Saba Rais

  • 724 Posts
  • 3 Reply Likes
Petra, how are you?
Photo of Saba Rais

Saba Rais

  • 724 Posts
  • 3 Reply Likes
Dear Petra, where you lost?
Please reply.
I want to ask that Can we create user registration-login system without sessions in php, too?
Thanks in advance
Photo of Saba Rais

Saba Rais

  • 724 Posts
  • 3 Reply Likes
Petra, :( Please come back! Please
Photo of Saba Rais

Saba Rais

  • 724 Posts
  • 3 Reply Likes
Petra where are you? Where is Phonegap Build support crew?
Photo of Saba Rais

Saba Rais

  • 724 Posts
  • 3 Reply Likes
Petra can you please answer here??
Photo of Saba Rais

Saba Rais

  • 724 Posts
  • 3 Reply Likes
Hi Petra, I can't forget your Help :) . I remember you always in my prayers. :)
Take Care
Photo of Saba Rais

Saba Rais

  • 724 Posts
  • 3 Reply Likes
Hello Petra, Greetingssss....
Hope you are good there :)
Photo of Saba Rais

Saba Rais

  • 724 Posts
  • 3 Reply Likes
Hi, Petra i am in a big trouble.
  • Why PGB is unable to Build android apps now?
  • NPM updated their plugin's versions may be, then PGB why can not support them?
  • Will it solve in future?
  • Or Is there any way to rebuild android apps successfully?
Please Help
Photo of Saba Rais

Saba Rais

  • 724 Posts
  • 3 Reply Likes
Hi Bot? How are you Petra, hope that you are well. :) 
Photo of Saba Rais

Saba Rais

  • 724 Posts
  • 3 Reply Likes
Hi, Petra How are you?
I am still getting notifications from Phonegap Build, I hope that you are getting too. I have started to develop my third app now. Yes all credit goes to YOU. Thank You


I CAN NOT forget your favors. 
Stay Bless
Photo of Saba Rais

Saba Rais

  • 724 Posts
  • 3 Reply Likes
Hi, Petra Verba, Hope that you are fine, you must be fine there, I pray for you. I can't forget your help and favor. Thanks again.

I was reading old chat here, and now am laughing on my stupid questions. Really you have taught me alot.

Whenever you live, live happy. 
Photo of Saba Rais

Saba Rais

  • 724 Posts
  • 3 Reply Likes
Salam Petra Verba or BOT :D

How are you? hope that u r fit and fine there.

Thanks alot for your help, it is still helping me :)