2013-03-06 1 views
0

Я постараюсь быть максимально наглядным. Извините, если это слишком много.jQuery.ajax() для PHP всегда входит в функцию request.fail

У меня есть файл HTML, с помощью простой формы авторизации, связывая JQuery и мой личный скрипт:

<html> 
<head> 
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> 

<title>Login</title> 
<script src="js/jquery-1.8.1.min.js"></script> 
<script src="js/50load-json.js"></script> 
</head> 

<body> 

<h1>Login Form</h1> 
<form id="myform"> 
     Username<br> <input type="text"  name="username" id="username"><p> 
     <!--Password <input type="password" name="password"> --> 
     Password<br> <input type="text"  name="password" id="password"><p> 
         <input type= 'submit' value='Login' id="submitLogin"> 
</form>  
<div id="output"></div> 
</body> 
</html> 

Из моего сценария (50load-json.js) я называю PHP, который подключается к моей БД и выполняет запрос, чтобы совместить имя пользователя и пароль.

код моего файла JS является следующее:

$(document).ready(function(){ 

     $("#myform").submit(function() { 
    var output = $('#output');  
      var my_post_data = "username=bloc&password=party";//These Parameters should evaluate as TRUE in the PHP 

     $.post("loginthisPOST.php", my_post_data) 
    .done(function(data) { alert("Data Loaded: " + data);}) 
    .fail(function(data) { alert("error: " + data); }); 
     });  
     }); 

мой "loginthisPOST.php" выглядит следующим образом:

<?php 
    header('Access-Control-Allow-Origin: *'); 
    header('Access-Control-Allow-Methods: POST'); 
    header('Access-Control-Allow-Headers: X-Requested-With'); 

    $u = strip_tags($_POST['username']); 
    $p = strip_tags($_POST['password']); 

    $con = mysql_connect("database","username","password"); 
    if (!$con) 
    { 
    die('Could not connect: ' . mysql_error()); 
    } 
     mysql_select_db ("phpmy1_bumblast_com"); 
     $sorgu="SELECT * from users WHERE username ='$u' AND password ='$p' "; 
     $ssql_select = mysql_query($sorgu)or die(mysql_error()); 
     if(mysql_num_rows($ssql_select)>0) 
     { 
      echo 'true'; 
     }else{ 
      echo 'false'; 
     }  
     mysql_close($con); 
?> 

Мой план, чтобы сделать это "динамический", очевидно, (добавив в мой файл «js» код var values = $(this).serialize();, а затем передав эти параметры как «my_post_data»), но я не могу даже вызвать PHP успешно со статическими данными. Он всегда выполняет функцию «fail». Чтобы быть более конкретным, это дает мне сообщение «error: [object Object]».

Я загрузил свой тестовый сайт, на всякий случай, я не могу делать такие запросы через MAMP, но он также терпит неудачу.

Моя страница «тест» опубликована здесь:

http://www.capitalbecarios.org/phonegap_tests/50login.html

Кроме того, я также «loginthisGET.php» для целей тестирования здесь (передавая имя пользователя и пароль, которые являются на самом деле правильно, так Равняется как "TRUE"):

http://www.capitalbecarios.org/phonegap_tests/js/loginthisGET.php?username=bloc&password=party

в "50load-json.js" и "loginthisPOST.php" оба расположены в "JS" папку, в которой "50login.html" есть.

Также, если я делаю $("#output").html('there is error while submit 1');, он отображает его, но затем удаляет его довольно быстро, потому что он обновляет страницу ?.

Не могли бы вы помочь этой неосведомленной душе достичь просветления?

Благодарим вас за внимание к этой заметке.

+0

Обновленный ответ :) – Bigood

+0

Обновлен вопрос, следующий за предложениями. Проблема по-прежнему сохраняется. – hugojl

ответ

0

Рассмотрим добавление return false; в представить обработчик:

$("#myform").submit(function() { 
    var my_post_data = $("#myform").serialize();  
    $.post("loginthisPOST.php", my_post_data) 
    .done(function(data) { alert("Data Loaded: " + data);}) 
    .fail(function(data) { alert("error: " + data); }); 
    return false; 
});  

Что происходит, что два запроса POST являются отправляется: ваш $.post(); и отправьте оригинальную форму. Когда второй запрос начинается, он отменяет все ожидающие XMLHttpRequests, генерируя «отмененную» ошибку для каждого из них (таким образом, вводя функцию сбоя). Именно поэтому вы видите обновление страницы, когда вы отклоняете предупреждение об ошибке.

+0

Это разрешило мою головоломку. Большое спасибо! – hugojl

0

[Обновлено] Как вы используете JQuery, рассмотрите возможность использования jQuery.post()

$("#myform").submit(function() { 
    var my_post_data = $("#myform").serialize(); 
    // Or = "username=bloc&password=party" for testing 
    $.post("loginthis.php", my_post_data, function (msg){ 
     //A callback function for your post 
     alert(msg); 
    }); 
} 
+0

Спасибо за ваш ответ !. Я исправил это, проблема сохранилась. – hugojl

+0

Я пробовал с '$.post'method, функция получает ответ в переменной msg, и я пытаюсь вывести сообщение с помощью 'alert (msg);' ... Каждый раз, когда я нажимаю «login», страница обновляется, она никогда НЕ ПРЕДУПРЕЖДЕТ. Спасибо за ваше терпение!. – hugojl

+0

@hugojl Убедитесь, что ваш атрибут 'action' пуст в вашем теге' form' и попытается удалить атрибут 'enctype' – Bigood

Смежные вопросы