我知道我已经问过了simillar问题,但现在当我使用jQuery Mobile时,我无法理解它。所以我有这样的形式:
<div data-role="page" data-theme="a" id="login_page">
<div data-role="header" data-position="fixed">
<h1>****</h1>
</div>
<div data-role="content">
<form id="login_form" method="POST" data-ajax="false">
<label for="basic">Username:</label>
<input type="text" name="name" id="username" value=""/>
<label for="basic">Password:</label>
<input type="password" name="password" id="password" value=""/>
<input type="submit" value="Login" id="login" name="login"/>
</form>
</div>
<div data-role="footer" data-position="fixed">
<div data-role="navbar"></div>
</div>
</div>
我需要向php脚本提交用户名和密码,其中php回复并发送“成功”或“失败”。这是php:
<?php
session_start();
$username = $_POST["name"];
$password = $_POST["password"];
include('mysql_connection.php');
mysql_select_db("jzperson_imesUsers", $con);
$res1 = mysql_query("SELECT * FROM temp_login WHERE username='$username' AND password='$password'");
$count=mysql_num_rows($res1);
if($count==1){
echo "success";
}else{
echo "failed";
}
?>
要做到这一切,我想使用这个脚本:
$(document).ready(function() {
$("form").submit(function(){
$.mobile.showPageLoadingMsg();
$.ajax({
url: "http://imes.jzpersonal.com/login_control.php",
type: "POST",
dataType: "jsonp",
jsonp: "jsoncallback",
data: $("form#login_form").serialize(),
success: function( response ){
$.mobile.changePage( "http://imes.jzpersonal.com/user_panel.html");
}
});
return false;
});
});
但是我不能让它发挥作用,我知道我必须在那里犯错,我找不到它们,或者更好的方法去做。提前感谢您的帮助。
答案 0 :(得分:2)
你几乎没有错。
予。 JSONP只允许输入:“GET”但你可以完全删除它。
这是JSONP $ .ajax调用的一个工作示例:
$.ajax({url: server_url,
data: save_data,
dataType: "jsonp",
jsonpCallback: 'successCallback',
async: true,
beforeSend: function() {
$.mobile.showPageLoadingMsg(true);
},
complete: function() {
$.mobile.hidePageLoadingMsg();
},
success: function (result) {
alert(result);
},
error: function (request,error) {
alert(error);
},
successCallback:function(){
}
});
II。现在最重要的是,因为你使用的是JSON / JSONP,所以你不能在PHP中使用echo“SOME_STRING”。首先,您必须使用json_encode()函数正确格式化结果数据,并且需要将其包装在jsonpCallback函数中:
echo $_GET['callback'] . '(' . "{'some' : 'example'}" . ')';
或:
echo $_GET['callback'] . '(' . ###your_serialized_json_output### . ')';
III。最后,您需要修改服务器,以便它可以处理JSONP调用。
在这里您可以找到更多相关信息:
http://www.geekality.net/2010/06/27/php-how-to-easily-provide-json-and-jsonp/
答案 1 :(得分:1)
尽管在客户端做尽可能多的工作通常是个好主意,但是身份验证应该在服务器端完成。您的user_panel
脚本应检查身份验证。
其次,您应该使用mysql_real_escape_string
保护您的SQL请求不被注入。你的代码应该是:
$res1 = mysql_query("SELECT * FROM temp_login
WHERE username='".mysql_real_escape_string($_POST['username'])."'
AND password='".mysql_real_escape_string($_POST['password'])."'");