Jquery AJAX POST 调用返回 200 状态正常但错误

声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow 原文地址: http://stackoverflow.com/questions/17575819/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me): StackOverFlow

提示:将鼠标放在中文语句上可以显示对应的英文。显示中英文
时间:2020-08-26 19:20:59  来源:igfitidea点击:

Jquery AJAX POST call return 200 status OK but error

javascriptweb-servicesjquery

提问by Nitesh Virani

Hi I have implemented one Ajax POST request to call web service. It always return 200 OK but execute failed event I have tried lot of things but I am not getting where I am doing mistake. I am adding my code here. Fiddlershows the response content but Ajax is not executing success event.

嗨,我已经实现了一个调用 Web 服务的 Ajax POST 请求。它总是返回 200 OK 但执行失败的事件我已经尝试了很多事情,但我没有得到我做错的地方。我在这里添加我的代码。Fiddler显示响应内容,但 Ajax 未执行成功事件。

<!DOCTYPE html>
<html><head>
<script src="http://code.jquery.com/jquery-1.7.1.min.js" type="text/javascript"></script>
</head>
<body>
<script type="text/javascript">

$.ajax({
    type: "POST",
    url: url,
    data: values,
    dataType: 'json',
    cache: false,
    success: function (result) {
        alert("success:"+result);
    },
    error:function (error) {
        alert("error"+error);
    }
});
</script>
</body>
</html>

I have tried dataType:'text'....response from server is in proper JSON format

我试过 dataType:'text'.... 来自服务器的响应是正确的 JSON 格式

Request JSON data :

请求 JSON 数据:

{
    "search": {
        "params_attributes": {
            "adults": "1",
            "children": "0",
            "depart_date": "2013-07-10",
            "destination_name": "OMS",
            "direct": "0",
            "infants": "0",
            "origin_name": "KUL",
            "range": "0",
            "trip_class": "0"
        }
    },
    "signature": "XXXXXXXX",
    "marker": "XXX"
}

Response JSON data:

响应 JSON 数据:

{
    "search_id":"66",
    "metadata" : {},
    "tickets" : [
        {
            "native_prices":{"7":"5500.0", "6":"5680.0", "3":"5657.0"},
            "order_urls":{"7":"1","6":"557","3":"906"},
            "direct_flights":[
                {
                    "number":"1837",
                    "airline":"FV",
                    "departure":"1294037100",
                    "arrival":"1294041900",
                    "duration":"80",
                    "delay":"0",
                    "origin":"DME",
                    "destination":"LED",
                    "aircraft":"Airbus A319"
                }
            ],
            "return_flights":[
                {
                    "number":"1858",
                    "airline":"FV",
                    "departure":"1295503800",
                    "arrival":"1295508600",
                    "duration":"80",
                    "delay":"0",
                    "origin":"LED",
                    "destination":"DME",
                    "aircraft":"Airbus A320"
                }
            ]
        }
    ],
       "airlines": {
          "AB": {
            "alliance_name": null,
            "average_rate": 3.84,
            "deeplink_id": 18,
            "homepage_id": "4ec0ff7b9f1c2760af0049d7",
            "id": 35,
            "name": "airberlin",
            "rates": 377
          },
          "AF": {
            "alliance_name": "SkyTeam",
            "average_rate": 2.89,
            "id": 48,
            "name": "Air France",
            "rates": 292
          }
        },
    "airports":{
          "ALA": {
            "average_rate": 3.66,
            "city": "\u0410\u043b\u043c\u0430\u0442\u044b",
            "country": "\u041a\u0430\u0437\u0430\u0445\u0441\u0442\u0430\u043d",
            "name": "\u0410\u043b\u043c\u0430\u0442\u044b",
            "rates": 60,
            "time_zone": "Asia/Almaty"
          },
          "AMM": {
            "average_rate": 3.42,
            "city": "\u0410\u043c\u043c\u0430\u043d",
            "country": "\u0418\u043e\u0440\u0434\u0430\u043d\u0438\u044f",
            "name": "Queen Alia International",
            "rates": 5,
            "time_zone": "Asia/Amman"
          }
    },
    "currency_rates":{"eur":"41.3564", "uah":"3.72911"},
        "gates_info": [
          {
            "average_rate": 4.34,
            "currency_code": "rub",
            "id": 1,
            "is_airline": false,
            "label": "Nabortu",
            "mobile_version": false,
            "payment_methods": [
                "bank",
                "yandex_money",
                "web_money",
                "terminal",
                "card",
                "svyaznoy",
                "euroset"
            ],
            "rates": 336
          },
          {
            "average_rate": 4.34,
            "currency_code": "rub",
            "id": 2,
            "is_airline": false,
            "label": "Davs",
            "mobile_version": false,
            "payment_methods": [
                "cash",
                "bank",
                "yandex_money",
                "web_money",
                "terminal",
                "card",
                "exp",
                "euroset"
            ],
            "rates": 416
          }
        ]
}

Ajax error: {"readyState":0,"responseText":"","status":0,"statusText":"error"}

Ajax 错误:{"readyState":0,"responseText":"","status":0,"statusText":"error"}

I am adding screenshots which is taken from firebug please go to tinygrab url to see screenshot:

我正在添加从 firebug 中截取的屏幕截图,请转到 tinygrab 网址查看屏幕截图:

Headers - grab.by/on5Q
Post - grab.by/on5U
Response - grab.by/on5W
Coockies - grab.by/on5Y

采纳答案by winner_joiner

Without seeing the JSON Response i would have to guess, that the Problem is, that you are using the Wrong(or no) Quotes for the JSON. You must use doubleQuotes(for property names and string values), or at least when i had that problem, the double quotes solved it.

如果没有看到 JSON 响应,我将不得不猜测,问题是您对 JSON 使用了错误的(或没有)引号。您必须使用引号(用于属性名称和字符串值),或者至少当我遇到这个问题时,双引号解决了它。

Example:

例子:

{"id":1,"name":"TOM"}

i hope this helps.

我希望这有帮助。

回答by K?v?lc?m

For other friends that have such an error, try to return a JSON value to the page that you send your values from.

对于其他出现此类错误的朋友,请尝试将 JSON 值返回到您发送值的页面。

In my case, I'm on localhost:8080/senderpage that sends JSON data to localhost:8110/receiverpage. After receiver page gets the data, return something like {}back to the sender page. Otherwise, the error callback is called even if the server returns a 200 HTTP code.

就我而言,我在localhost:8080/sender将 JSON 数据发送到localhost:8110/receiver页面的页面上。接收者页面获取数据后,返回类似于{}发送者页面的内容。否则,即使服务器返回 200 HTTP 代码,也会调用错误回调。