Сделайте php запрос с ajax - PullRequest
       1

Сделайте php запрос с ajax

2 голосов
/ 04 сентября 2011

Я хотел бы сделать SQL-запрос с ajax, поэтому мне не нужно перезагружать страницу / загружать новую страницу.

Так что в основном мне нужно вызвать страницу php с помощью ajax.И было бы замечательно, если бы мог быть способ перезагрузить счетчик количества строк в таблице.

Редактировать: чтобы сделать это более понятным, он должен быть в состоянии сделать что-то вроде того, когдаВы нажимаете кнопку «Нравится» на Facebook.

Спасибо

Ответы [ 10 ]

6 голосов
/ 04 сентября 2011
<html>
<head>
<script type="text/javascript">
function loadXMLDoc()
{
var xmlhttp;
if (window.XMLHttpRequest)
{// code for IE7+, Firefox, Chrome, Opera, Safari
 xmlhttp=new XMLHttpRequest();
}
else
{// code for IE6, IE5
  xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
}
     xmlhttp.onreadystatechange=function()
{
    if (xmlhttp.readyState==4 && xmlhttp.status==200)
    {
        document.getElementById("your_div").innerHTML=xmlhttp.responseText;
    }
  }
xmlhttp.open("GET","ajax_file.php",true);
xmlhttp.send();
}
</script>
</head>
<body>

<div id="myDiv">here are your contents</div>
<button type="button" onclick="loadXMLDoc()">Change Content</button>

</body>
</html>
3 голосов
/ 04 сентября 2011

Вы не хотите делать запросы, используя ajax, вы хотите получать новые данные, используя ajax, что является принципиальным отличием.

Вы должны просто, используя ajax, запросить страницу php, возможно, с некоторыми параметрами,который, в свою очередь, выполняет запрос и возвращает данные в формате, который вы можете обработать (скорее всего, json).

Если вы разрешите выполнение запросов с использованием ajax, как вы собираетесь предотвратить отправку злонамеренным пользователемdrop table users вместо select * from news where id = 123?

2 голосов
/ 13 сентября 2011

кнопка «Мне нравится в Facebook» в Agile Toolkit (PHP UI Library):

$likes = get_like_count();

$view = $this->add('View');
$button = $view->add('Button')->setLabel('Like');
$view->add('Text')->set($likes);

if($button->isClicked()){
    increate_like_count();
    $view->js()->reload()->execute();
}

ps не требуется дополнительный JS или HTML-код.

2 голосов
/ 07 сентября 2011
function onClick(){
     $.post(
        "path/to/file", //Ajax file ajax_file.php        
        { value : value ,insiId : insiId  },  // parameters if you want send        
        //function that is called when server returns a value.
        function(data){
            if(data){
                $("#row_"+data.id).show();     //display div rows               
            }
        },"json"   
    );
}
<div id="myDiv">here are your contents</div>
<button type="button" onclick="onClick()">Change Content</button>

Вот код ajax, который вы можете вызвать в php-файле на стороне сервера, получить результат и делать то, что вы хотите

2 голосов
/ 04 сентября 2011

Вы не будете выполнять sql-запрос с ajax, вам нужно просто вызвать внешнюю php-страницу (ту, где находится ваш запрос) в фоновом режиме, используя ajax.Вот ссылка, которая объясняет, как это сделать с помощью jquery: http://api.jquery.com/jQuery.ajax/

1 голос
/ 07 сентября 2011

Возможное решение: Ajax вызывает PHP-скрипты, которые делают запрос и возвращают новый номер

$.ajax({
    async:true,
    type:GET,
    url:'<PHP_FILE>',
    cache:false,
    data:'<GET_PARAMETERS_SENT_TO_PHP_FILE>',
    dataType:'json',
    success: function(data){
        $('<#HTML_TARGET>').html(data);
    },      
    error: function(jqXHR, textStatus, errorThrown){
        $('<#HTML_TARGET>').html('<div class="ajax_error">'+errorThrown+'</div>');
    }
});

Где

  • <PHP_FILE> - ваш php-скрипт, вывод которого должен быть закодирован в соответствии с dataType. Доступные типы (и результат, передаваемый в качестве первого аргумента в ваш обратный вызов успеха): «xml», «html», «script», «json», «jsonp», «text».
  • <GET_PARAMETER_SENT_TO_PHP> - это отдельный список значений через запятую, отправленный через GET (es. 'Mode = ajax & mykey = myval')
  • <#HTML_TARGET> - это селектор jquery

Подробнее см. jquery.ajax .

Например:

<p>Votes:<span id="count_votes"></span></p> 
<script type="text/javascript">
    $.ajax({
        async:true,
        type:GET,
        url:'votes.php',
        cache:false,
        dataType:'text',
        data:'id=4'
        success: function(data){
            $('#count_votes').html(data);
        },      
        error: function(jqXHR, textStatus, errorThrown){
            $('#count_votes').html(errorThrown);
        }
    });
</script>
1 голос
/ 07 сентября 2011

Вы не правы, кто говорит, что он отправляет весь запрос, кто говорит, что он не фильтрует?Вы можете сделать все это легко с помощью функции загрузки jquery, вы загружаете php-файл подобным образом $ ('# BOX'). Load ('urfile.php? Param = ...');.

Имеетевесело, я надеюсь, что это было немного полезно для вас, простите за мой плохой английский.

0 голосов
/ 14 сентября 2011

HTML:

//result div will display result
<div id="result"></div>
<input type="button" onclick="getcount();" value="Get Count"/>

JS:

//will make an ajax call to ustom_ajax.php
function getcount()
{

    $.ajax({
        type:"get",
        url : "custom_ajax.php",
        beforeSend: function() {        
                // add the spinner 

                $('<div></div>')
                  .attr('class', 'spinner')
                  .hide()
                  .appendTo("#result")
                  .fadeTo('slow', 0.6);
              },
        success : function (data) {             
        $("#result").html(data);
        },
        complete: function() {        
                // remove the spinner 
                $('.spinner').fadeOut('slow', function() {
                  $(this).remove();
                });
        }
    });
}

custom_ajax.php:

 //will perform server side function
//make a connection and then query 
$query_txt = "SELECT count(*) FROM table "; 
$result= mysql_query($query_txt) or die(mysql_error()); 
$total=mysql_num_rows($result) ;
$html= "Total result is $total";    
echo $html; exit();
0 голосов
/ 13 сентября 2011

Вот пример, который использует мой любимый плагин jQuery, jQuery.tmpl () , а также функцию jQuery .text () .

HTML и Javascript код:

<!DOCTYPE html>
<html>
<head>
  <script src="http://code.jquery.com/jquery-latest.min.js"></script>
  <script src="http://ajax.microsoft.com/ajax/jquery.templates/beta1/jquery.tmpl.min.js"></script>
</head>
<body>

<script id="UserTemplate" type="text/x-jquery-tmpl"> 
    <li><b>Username: ${name}</b> Group ID: (${group_id})</li>
</script>


<button id="facebookBtn">Facebook Button</button>
<div id="UserCount"></div>
<ul id="userList"></ul>

<script>
function getData(group_id) {
    $.ajax({
        dataType: "json",
        url: "test.php?group_id=" + group_id,
        success: function( data ) {

            var users = data.users;

            /* Remove current set of movie template items */
            $( "#userList" ).empty();

            /* Render the template with the movies data and insert
               the rendered HTML under the "movieList" element */
            $( "#UserTemplate" ).tmpl( users )
                .appendTo( "#userList" );

            $( "#UserCount" ).text('Number of users: '+ data.count);

        }
    });
}

$( "#facebookBtn" ).click( function() {
    getData("1");
});

</script>

</body>
</html>

PHP код

<?php
//Perform a query using the data passed via ajax
$group_id = $_GET['group_id'];
$user_array = array(
  array('name'=>'John','group_id'=>'1',),
  array('name'=>'Bob','group_id'=>'1',),
  array('name'=>'Dan','group_id'=>'1',),
);
$user_count = count($user_array);
echo json_encode(array('count'=>$user_count,'users'=>$user_array));
0 голосов
/ 08 сентября 2011

Если вы ищете что-то вроде фейсбука вроде btn. Тогда ваш PHP-код должен выглядеть примерно так -

<?php

$topic_no = $_POST['topic'];

$topic_likes = update_Like_count($topic_no);

echo $topic_likes;

function update_Like_count($topic)
{
    //update database by incrementing the likes by one and get new value

    return $count;
}
?>

и ajax javascript / jquery должен выглядеть примерно так -

<script>

      $('#like-btn').click( function () {

             $.post(

            "like.php",

            { topic : value },

            function(data)
            {
                if(data)
                {
                    $("#like-btn span").append(data);     //or append it to wherever you'd like to show it              
                }
                else
                {
                    echo "error";
                }
            },
            "json"
        );
        });


</script>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...