2015-05-27 2 views
-1

Ive пытался создать div на моей индексной странице, в которой onclick вызывает функцию js, которая будет отправлять данные на php-страницу для вычислений и запросов mysql. но не только мои инструменты для разработчиков Chrome показывают, что запрос POST даже не происходит, но страница просто обновляет минуту, я нажимаю кнопку отправки. мой обработчик события на главной странице РНР OnClick, , который должен привести к этой функции

function submitvote(uv){ 
$('#rank_IFC').html('<img src="ajax-loader.gif">').show(); 
var sortdata = $('ul.sort').sortable('toArray').join(','); 
var url= "results.php"; 
$.post(url, {Tablename:uv, sortdata: sortdata}, function(){ 
    $('#rank_IFC').html('').show(); 
    }); 
    } 

, который должен привести к чем мой PHP условному,

<?php if(!defined('INCLUDE_CHECK')) die('You are not allowed to execute this file directly'); 
    // Including file for the DB connection: 
    require 'connect.php'; 

    // If the poll has been submitted: 
    $tablename=$_POST['Tablename']; 


    if($tablename=='IFC') 
{  

    $userOrder=$_POST['sortdata']; 


// The data arrives as a comma-separated string, 
// so we extract each post ids: 
$data=explode(',',str_replace('li','',$_POST['sortdata'])); 



    // Getting the number of objects 
list($tot_objects) = mysql_fetch_array(mysql_query("SELECT COUNT(*) FROM sort_objects")); 

if(count($data)!=$tot_objects) die("Wrong data!"); 

foreach($data as $k=>$v) 
{ 
    // Building the sql query: 
    $str[]='('.(int)$v.','.($tot_objects-$k).')'; 
} 

$str = 'VALUES'.join(',',$str); 



// This will limit voting to once a day per IP: 
mysql_query(" INSERT INTO `sort_votes` (ip,date_submit,dt_submit,userOrder,Tablename) 
       VALUES  ('".$_SERVER['REMOTE_ADDR']."',NOW(),NOW(),$userOrder,$tablename)"); 

// If the user has not voted before today: 
if(mysql_affected_rows($link)==1) 
{ 

mysql_query(' INSERT INTO `IFC` (id,votes) '.$str.' 
        ON DUPLICATE KEY UPDATE votes = votes+VALUES(votes)'); 
} 


    } 

моей основной индекс страница в PHP. мой вопрос в том, почему не возникает запрос на отправку AJAX при вызове функции?

+0

Вы смотрели запрос/ответ в консоли браузера? Кроме того, пожалуйста [остановите использование 'mysql_ *' функций] (http://stackoverflow.com/questions/12859942/why-shouldnt-i-use-mysql-functions-in-php). Они больше не поддерживаются и [официально устарели] (https://wiki.php.net/rfc/mysql_deprecation). Узнайте о [подготовленных заявлениях] (http://en.wikipedia.org/wiki/Prepared_statement) и подумайте об использовании PDO, [это не так сложно, как вы думаете] (http://jayblanchard.net/demystifying_php_pdo.html) , –

+0

Как вы называете эту функцию? Вероятно, у вас также есть '

' на странице и что форма отправляется. – Pointy

+0

Да, по умолчанию он асинхронный. Вы должны явно сказать, что хотите синхронный вызов. Ваш код sql уязвим для [SQL-инъекций] (http://bobby-tables.com) и, вероятно, страдает от синтаксических ошибок, так как у вас абсолютно нет обработки ошибок, вы никогда не сможете сказать , –

ответ

0

$.POST и все другие вызовы AJAX по умолчанию асинхронны, но вы можете сделать его синхронным на changing async to false.

Лучшее решение, хотя и должно было бы предотвратить распространение событий. Поскольку вызов асинхронный, функция submitvote продолжает выполняться, и у вас нет ничего, чтобы предотвратить распространение этого события другим слушателям. Чтобы исправить это, вы должны return false внизу submitvote. См. here для более подробной информации.

Кроме того, вы должны, вероятно, использовать $.submit, чтобы прослушать формы, а не кнопки. Это будет захватывать, например. формы, выполняемые с клавиатуры.

0

Из doc По умолчанию все запросы Ajax посылаются асинхронно (то есть async набор для true по умолчанию). Если вам нужны синхронные запросы, установите async: false.

$.post() является сокращенной функцией Ajax

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

$('#myForm').on("submit", function(evt) { 
    evt.preventDefault(); 
    submitvote("yourParam"); 
}); 

function submitvote(uv) { 
    $('#rank_IFC').html('<img src="ajax-loader.gif">').show(); 
    var sortdata = $('ul.sort').sortable('toArray').join(','); 
    var url= "results.php"; 
    $.post(url, {Tablename:uv, sortdata: sortdata}, function(){ 
     $('#rank_IFC').html('').show(); 
    }); 
} 

И форма может выглядеть следующим образом:

<form id="myForm"> 
    <!-- ... more input elemenst --> 
    <input type="submit" value="Submit Me" />  
</form> 
Смежные вопросы