$.ajax跨域提交form表单并请求dede织梦数据库信息+返回数据问题

      本地测试时(不跨域)使用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("提交成功!").')';
        }
复制代码

修改完成,测试成功。





评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值