繁体   English   中英

什么因素会导致jquery.ajax每次都将响应视为错误

[英]What factors would cause jquery.ajax to consider the response to be error, every time

前端:

<script type="text/javascript">
jQuery("#FormButtonRun").click(function(event){
    submitEmailForm();
});

var submitEmailForm = function ()  {
    var submitdata = {'Email':jQuery('#FormEmail').val(), 'fName':jQuery('#FormName1').val(), 'lName':jQuery('#FormName2').val(), 'listnews':"Yes"};

    jQuery.ajax({
        type:'POST',
        url:'https://dev.formserver.com/ajax.php',
        data:submitdata,
        success: submitwrkd,
        error: submitfaild,
        dataType:'json'
    });
}

var submitwrkd = function(response, more, xhr){
    alert("It worked!);
    alert(response.msg);
}

var submitfaild = function(response, more, xhr){
    alert("allegedly that failed");
}

后端:ajax.php:

<?php
header('Content-type:application/json');
echo json_encode(array('success'=>true, 'msg'=>'It was a success'));
?>

在内容服务器和发布到服务器上的Content-Control-Allow-Origin都设置为*

完整标题:

POST /ajax.php HTTP/1.1
Host: dev.dataserver.org
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.12; rv:51.0) Gecko/20100101 Firefox/51.0
Accept: application/json, text/javascript, */*; q=0.01
Accept-Language: en-US,en;q=0.5
Accept-Encoding: gzip, deflate, br
Content-Type: application/x-www-form-urlencoded; charset=UTF-8
Referer: https://dev.dataserver.org/popuptest
Content-Length: 127
Origin: https://dev.contentserver.org
Connection: keep-alive
Email={removed post data}

响应:

HTTP/1.1 200 OK
Server: nginx/1.8.1
Date: Tue, 16 May 2017 00:44:49 GMT
Content-Type: application/json
Transfer-Encoding: chunked
Connection: keep-alive
Access-Control-Allow-Origin: *
Access-Control-Allow-Methods: POST

数据: {"success":true,"msg":"It was a success"}

开发人员工具网络

  • 该按钮成功触发提交
  • 目标服务器日志文件显示请求和响应"POST /ajax.php HTTP/1.1" 200 67 "-" "Mozilla/5.0 ...
  • 浏览器开发工具显示响应:HTTP代码:200,响应内容被识别为json: success: true, msg: 'It was a success'

javascript警报宣布: allegedly that failed

我已经检查了内容控制标头Access-Control-Allow-Origin: *; Access-Control-Allow-Methods: POST; Access-Control-Allow-Origin: *; Access-Control-Allow-Methods: POST; 显然,它正在经历,数据类型,json错误,javascript错误(未抛出),不同的浏览器...

如何在success时运行定义的success函数,以及在出现问题时运行错误函数?

我可以回到.done(),但是强烈希望知道它可以工作。

  • 无效的ajax调用参数
  • 目标或原始服务器上缺少Access-Control-Allow-Origin标头
  • 目标或源上的访问控制标头不正确
  • 标头损坏(例如:无效的域名/域名或Access-Control-Allow-Origin: '*
  • 来自目标服务器的无效响应头或内容流
  • 阻止源域或目标域
  • Javascipt已从第三台服务器,CDN加载(CDN需要设置其域标头,而目标服务器则设置为以CDN作为源)
  • 使用过时的Ajax框架(较旧的jquery,scriptaculous或原型),无法在当前浏览器中正常使用Access-Control

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM