本地测试时(不跨域)使用json
请求,PHP
可以返回字符串。并且success
可以进入执行,但是跨域jsonp
请求时,就会出现问题。
JQ $.ajax 请求代码:
function add_ajaxmessage() { //button 提交时的方法
var dataString = //表单数据
"name=" +
$("#name").val() + //表单的name和id值必须一致,注意:这一行最前面不能带有'&'符号
"&phone=" +
$("#phone").val() + //表单的name和id值必须一致,多个input请自行复制此行代码
"&sj=" +
$("#sj").val() + //表单的name和id值必须一致,多个input请自行复制此行代码
"&action=post" +
"&diyid=10&do=2&dede_fields=name,text;phone,text;sj,textchar&dede_fieldshash=ff5d67008c1a73047247c6044ef3bb7d";
$.ajax({ type: "POST", url: "http://localhost/plus/diy.php",//提交到后台文件 data: dataString,//传值 dataType:"jsonp",/*加上datatype*/ success: function(data) { console.info(data); if(data == "提交成功!"){ console.info("11"); } }, error: function (XMLHttpReuqest, textStautus, errothrown) { console.log(XMLHttpRequest.status); console.log(XMLHttpReuqest.readyState); console.log(XMLHttpRequest.responseText); console.log(textStautus); console.log(errothrown); }
});
return false;
}复制代码
PHP
处理返回代码:
$returnData= mysql_query("SELECT * FROM `{$diy->table}` where phone = $phone"); //查询数据库是否有这个电话号码
while($result=mysql_fetch_assoc($returnData)){
$listTop_info[]=$result;//将取得的所有数据,一行两行或者三行,此例只有一行,赋值给listTop_info数组
}
// if($dsql->ExecuteNoneQuery($query))
if($listTop_info)
{
$id = $dsql->GetLastID();
if($diy->public == 2)
{
// echo $addvalue[1];
}
else
{
echo '已提交成功!';
}
}else{
$dsql->ExecuteNoneQuery($query);
echo '提交成功!';
}
复制代码
当本地请求时 success
可以执行,并能打印data
。
跨域请求时:
问题一:
Uncaught SyntaxError: Unexpected token <
ajax
请求成功并返回了数据,但是返回的是dede的提示页面:
ajax的data信息没匹配对。
问题二:
XMLHttpRequest cannot load http://域名/plus/diy2.php. No 'Access-Control-Allow-Origin' header is present on the requested resource. Origin 'http://localhost' is therefore not allowed access.
跨域请求 必须是 jsonp
dataType:"jsonp",/*加上datatype*/
问题三:
Uncaught SyntaxError: Invalid or unexpected token
跨域请求时,PHP返回的数据类型不一样。
在PHP返回数据时 加上 json_encode('已提交成功!')
将数据转成 json
格式。
之后就会出现 有返回数据,但是不进 success
。
解决方法:
$.ajax 增加 jsonp: "jsonpCallback",jsonpCallback: "jsonpCallback",
这两句。
function add_ajaxmessage() {
var dataString =
"name=" +
$("#name").val() + //表单的name和id值必须一致,注意:这一行最前面不能带有'&'符号
"&phone=" +
$("#phone").val() + //表单的name和id值必须一致,多个input请自行复制此行代码
"&sj=" +
$("#sj").val() + //表单的name和id值必须一致,多个input请自行复制此行代码
"&action=post" +
"&diyid=10&do=2&dede_fields=name,text;phone,text;sj,textchar&dede_fieldshash=ff5d67008c1a73047247c6044ef3bb7d";
$.ajax({
type: "POST",
url: "http://域名/plus/diy1.php", //提交到后台文件
data: dataString, //传值
dataType: "jsonp" /*加上datatype*/,
jsonp: "jsonpCallback",
jsonpCallback: "jsonpCallback",
success: function(data) {
console.info(data);
if (data == "提交成功!") {
console.info("11");
}
},
error: function (XMLHttpReuqest, textStautus, errothrown) {
console.log(XMLHttpRequest.status);
console.log(XMLHttpReuqest.readyState);
console.log(XMLHttpRequest.responseText);
console.log(textStautus);
console.log(errothrown);
}
});
return false;
}复制代码
PHP 使用 echo $_GET["jsonpCallback"].'('.json_encode("已提交成功!").')';
将数据返回。
$returnData= mysql_query("SELECT * FROM `{$diy->table}` where phone = $phone"); //查询数据库是否有这个电话号码
while($result=mysql_fetch_assoc($returnData)){
$listTop_info[]=$result;//将取得的所有数据,一行两行或者三行,此例只有一行,赋值给listTop_info数组
}
if($listTop_info)
{
$id = $dsql->GetLastID();
if($diy->public == 2)
{
}
else
{
echo $_GET["jsonpCallback"].'('.json_encode("已提交成功!").')';
}
}else{
$dsql->ExecuteNoneQuery($query);
echo $_GET["jsonpCallback"].'('.json_encode("提交成功!").')';
}
复制代码
修改完成,测试成功。