RE: [PHP] connecting php long-polling to the database
| From: | hadi | Date: | Wed, 04 Feb 2015 21:23:45 +0000 |
| Subject: | RE: [PHP] connecting php long-polling to the database | ||
| References: | 1 2 3 4 | Groups: | php.general |
| Request: | Send a blank email to php-general+get-324386@lists.php.net to get a copy of this message | ||
> -----Original Message-----
> From: Ashley Sheridan [mailto:ash@ashleysheridan.co.uk]
> Sent: Wednesday, February 04, 2015 11:50 PM
> To: hadi
> Cc: php-general@lists.php.net
> Subject: Re: [PHP] connecting php long-polling to the database
>
> On Wed, 2015-02-04 at 23:45 +0300, hadi wrote:
> > Thank you Ash for your reply.
> >
> > When I open my php script direct I can see my table. Working fine.
> > But throw AJAX not working.
> > I think the problem from server.php script, can you please check my code
> in your end.
> >
> > Thanks and regards
> > Hadi
> >
> > > On Wed, 2015-02-04 at 22:47 +0300, hadi wrote:
> > > > i have script,php-long-polling, im unable to connected to my database.
> > > > can someone look to my script and let me know where im wrong. i
> > > > wanted to connect to my database and display database table in the
> html page.
> > > >
> > > > index.html
> > > >
> > > > <html>
> > > > <head>
> > > > <script type="text/javascript"
> > > > src="http://code.jquery.com/jquery.min.js"£ëˆÓ71Xz(¥
> > > > ¦°Xá></script>
> > > > <script type="text/javascript"
> > > > src="client.js"></script>
> > > > </head> <body>
> > > > <h1>Response from server:</h1>
> > > > <div id="response"></div>
> > > > </body>
> > > > </html>
> > > > server.php
> > > >
> > > > <?php
> > > >
> > > > // set php runtime to unlimited
> > > >
> > > > $servername = "localhost";
> > > > $username = "recorduser";
> > > > $password = "recorduser";
> > > > $database = "record";
> > > >
> > > > // Create connection
> > > > $conn = mysqli_connect($servername, $username, $password,
> > > $database);
> > > > // Check connection if (!$conn) { die("Connection failed: " .
> > > > mysqli_connect_error()); }
> > > >
> > > > $sql = "SELECT * from username ORDER BY id DESC LIMIT 1";
> > > > $result1 = mysqli_query($conn, $sql);
> > > >
> > > > set_time_limit(0);
> > > > // where does the data come from ? In real world this would be a
> > > > SQL query or something $data_source_file = '$result1'; // main
> > > > loop while
> > > > (true) { // if ajax request has send a timestamp, then
> > > > $last_ajax_call = timestamp, else $last_ajax_call = null
> > > > $last_ajax_call =
> > > > isset($_GET['timestamp']) ? (int)$_GET['timestamp'] :
> > > > null;
> > > > // PHP caches file data, like requesting the size of a file, by default.
> > > > clearstatcache() clears that cache
> > > > clearstatcache(); // get timestamp of when file
> > > > has been changed the last time $last_change_in_data_file =
> > > > filemtime($data_source_file); // if no timestamp delivered via
> > > > ajax or data.txt has been changed SINCE last ajax timestamp if
> > > > ($last_ajax_call == null || $last_change_in_data_file >
> > > > $last_ajax_call) {
> > > > // get content of data.txt
> > > > #$data = file_get_contents($data_source_file);
> > > >
> > > > $data = while($row = mysqli_fetch_array($result1))
> > > >
> > > > {
> > > >
> > > > echo "<tr>";
> > > > echo "<td>" . $row['name'] . "</td>";
> > > > echo "<td>" .
> > > > $row['lastname'] . "</td>"; echo
> > > > "</tr>"; } // put data.txt's
> > > > content and timestamp of last data.txt change into array
> > > > $result = array(
> > > > 'data_from_file' => $data,
> > > > 'timestamp' => $last_change_in_data_file
> > > > );
> > > > // encode to JSON, render the result (for AJAX)
> > > > $json = json_encode($result);
> > > > echo $json;
> > > > // leave this loop step
> > > > break;
> > > > } else {
> > > > // wait for 1 sec (not very sexy as this blocks the PHP/Apache
> > > > process, but that's how it goes)
> > > > sleep( 1 );
> > > > continue;
> > > > }
> > > > }
> > > >
> > > > ?>
> > > > client.js
> > > >
> > > > /**
> > > > * AJAX long-polling
> > > > *
> > > > * 1. sends a request to the server (without a timestamp parameter)
> > > > * 2. waits for an answer from server.php (which can take forever)
> > > > * 3. if server.php responds (whenever), put data_from_file into
> > > > #response
> > > > * 4. and call the function again
> > > > *
> > > > * @param timestamp
> > > > */
> > > >
> > > > function getContent(timestamp)
> > > > {
> > > > var queryString = {'timestamp' : timestamp};
> > > >
> > > > $.ajax(
> > > > {
> > > > type: 'GET',
> > > > url:
> > > > 'http://192.168.206.129/record/server.php',
> > > > data: queryString,
> > > > success: function(data){
> > > > // put result data into "obj"
> > > > var obj = jQuery.parseJSON(data);
> > > > // put the data_from_file into #response
> > > > $('#response').html(obj.data_from_file);
> > > > // call the function again, this time with the
> > > > timestamp we just got from server.php
> > > > getContent(obj.timestamp);
> > > > }
> > > > }
> > > > );
> > > > }
> > > >
> > > > // initialize jQuery
> > > > $(function() {
> > > > getContent();
> > > > });
> > > >
> > > >
> > >
> > >
> > > What happens when you make a direct request to the PHP script, i.e.
> > > not via an AJAX request. What do you see? Are you getting any
> > > connection errors, or output? If not, what do your error logs say?
> > >
> > > --
> > > Thanks,
> > > Ash
> > > http://www.ashleysheridan.co.uk
> > >
> > >
> > >
> > >
> > > --
> > > PHP General Mailing List (http://www.php.net/) To unsubscribe,
> > > visit: http://www.php.net/unsub.php
> >
> >
> >
>
> First, please do not top post, the list rules do ask that you bottom post.
>
> What do you see in your browser network inspector? Is the query parameter
> being passed correctly? Are the URLs that both your AJAX request and the
> direct call in your browser the same?
>
> Also, what do the error logs say?
Ash,
Im getting error in my browser console
In my bowers console I get this error
HTML1300: Navigation occurred.
File: index.html
HTML1527: DOCTYPE expected. Consider adding a valid HTML5 doctype: "<!DOCTYPE
html>".
File: index.html, Line: 1, Column: 1
SCRIPT1014: Invalid character
File: jquery.min.js, Line: 4, Column: 15725
Also im getting error from client.js from my browser debugger
**
* AJAX long-polling
*
* 1. sends a request to the server (without a timestamp parameter)
* 2. waits for an answer from server.php (which can take forever)
* 3. if server.php responds (whenever), put data_from_file into #response
* 4. and call the function again
*
* @param timestamp
*/
function getContent(timestamp)
{
var queryString = {'timestamp' : timestamp};
$.ajax(
{
type: 'GET',
url: 'http://192.168.206.129/record/server.php',
data: queryString,
success: function(data){
Invalid character
// put result data into "obj"
var obj = jQuery.parseJSON(data); X Error
// put the data_from_file into #response
$('#response').html(obj.data_from_file);
// call the function again, this time with the timestamp we just got from server.php
getContent(obj.timestamp);
}
}
);
}
// initialize jQuery
$(function() {
getContent();
});