我有一个ajax电话......
$(function(){
$('#registerUser').submit(function() {
$.ajax({
url: 'http://www.mysite.co.uk/path/register/add_user.php',
type: 'post',
data: form.serialize(),
dataType: 'json',
crossDomain : true,
timeout: 5000,
success: function(msg){
alert(msg.name);
},
error: function(){
alert('There was an error loading the data.');
}
});
});
});
当我在PHP文件中回显json对象时,这一切都正常。然而,当使用我的类回显它时,它会在页面上回显,但在与ajax函数一起使用时不起作用 - 不会返回任何内容。
值得说我是OOP的菜鸟。我想要返回的对象只是一个与函数无关的简单对象,仅用于测试目的。
<?php
include('../config/.db.php');
include('../config/headers.php');
$firstName = $_POST['name'];
$surname = $_POST['surname'];
$email = $_POST['email'];
$password = $_POST['password'];
$password2 = $_POST['password2'];
class user{
public $returnArray;
public function addUser($firstName, $surname, $email, $password, $mysqli){
$stmt = $mysqli -> prepare("INSERT INTO users(name, surname, email, password) VALUES (?,?,?,?)");
$stmt -> bind_param("ssss", $firstName, $surname, $email, $password);
$stmt -> execute();
$stmt -> bind_result($result);
$stmt -> fetch();
$stmt -> close();
$array = array('name'=>'andre');
$this->returnArray = json_encode($array);
}
}
$user = new user;
$user->addUser($firstName, $surname, $email, $password, $mysqli);
echo $user->returnArray;
?>
请求/响应
POST /intheloop/register/add_user.php HTTP/1.1
Host: www.mysite.co.uk
Connection: keep-alive
Content-Length: 47
Accept: application/json, text/javascript, */*; q=0.01
Origin: null
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_8_2) AppleWebKit/537.17 (KHTML, like Gecko) Chrome/24.0.1312.56 Safari/537.17
Content-Type: application/x-www-form-urlencoded; charset=UTF-8
Accept-Encoding: gzip,deflate,sdch
Accept-Language: en-US,en;q=0.8
Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.3
Form Dataview sourceview URL encoded
name:a
surname:a
email:a
password:a
password2:a
Response Headersview parsed
HTTP/1.1 200 OK
Date: Sat, 26 Jan 2013 20:51:36 GMT
Server: Apache
X-Powered-By: PHP/5.3.15
Access-Control-Allow-Origin: *
Access-Control-Allow-Methods: GET,PUT,POST,OPTIONS,DELETE
Keep-Alive: timeout=5, max=75
Connection: Keep-Alive
Transfer-Encoding: chunked
Content-Type: application/json
答案 0 :(得分:0)
您似乎违反了浏览器中内置的same origin policy
限制,这会阻止您发送跨域AJAX请求。
您只能将AJAX请求发送到与用于托管AJAX脚本的域相同的域上托管的脚本。在这种情况下,您似乎尝试向http://www.mysite.co.uk/path/register/add_user.php
发送AJAX请求,但为此,您的javascript文件必须托管在http://www.mysite.co.uk/
上。
您可能会考虑some workarounds
。它们涉及在您的域中使用JSONP
,CORS
或服务器端桥接脚本。
答案 1 :(得分:0)
如果你的AJAX调用没有请求来自同一域的数据,那么它将无法正常工作,这就是浏览器不会滥用AJAX的安全性。因此,为了使其跨域工作,您可以做的事情之一是从PHP脚本发出CORS头。
您可以将其添加到PHP文件
header('Access-Control-Allow-Origin: *');
这将指示浏览器他们可以接受此ajax调用和数据传输,然后您的脚本将正常工作。
答案 2 :(得分:0)
你也可能想要添加它来为输出提供一个合适的mime类型,把它放在&#39; echo&#39;上面一行:
header('Content-type: application/json');
答案 3 :(得分:0)
所以错误是线
的事实 $stmt -> bind_result($result);
搞乱了查询结果中预期的绑定变量。因为我没有使用查询检索任何内容,所以没有任何内容可以将变量$ result赋值给。
这反过来给PHP错误弄乱了json返回。