简体   繁体   English

将带有POST的JSON发送到服务器进行解析-为什么此Ajax调用失败?

[英]Sending JSON with a POST to server for parsing - why does this ajax call fail?

So, I send a JSON string to my server for parsing via jQuery ajax. 因此,我将JSON字符串发送到服务器以通过jQuery ajax进行解析。 I get the JSON from the Glosbe dictionary's API. 我从Glosbe字典的API获取JSON。 Most of the time it works as expected, but there are certain JSONs that fail. 在大多数情况下,它可以按预期运行,但是某些JSON会失败。 What is interesting is that in those cases I get an "Internal server error", but when I tried to debug the application, it seemed like the controller wasn't even called. 有趣的是,在这些情况下,我会收到“内部服务器错误”,但是当我尝试调试应用程序时,似乎甚至没有调用控制器。 I don't know how that's even possible. 我不知道那怎么可能。

Here's my View: 这是我的观点:

        $.ajax({
        url: '@Url.Action("Parse", "GetMeaning")',
        dataType: "json",
        data: "ValueToParse=" + jsonToSend, //maybe it's better to send a json instead of a string
        type: 'POST',
        async: false,
        contentType: "application/json; charset=utf-8",
        success: function (data) {
            //pass the data to the server for parsing

            //alert("sendJsonToServer successful, sended " + JSON.stringify(json1) + "got back: " + data);
            setMeaningofExpression(expression, data);
            $('#expressionTranslations').html(expressionsAsString());
        },
        error: function (xhr, status, error) {
            alert('sendJsonToServer error, tried to send ' + JSON.stringify(jsonToSend) + 'problem: ' + status + " " + error);
        }
    });

Controller: 控制器:

    [HttpPost]
    public JsonResult Parse(String ValueToParse)
    {

            return Json(Parser.Parse(ValueToParse).ToArray());

    }

An example Json that fails: 失败的示例Json:

{"result":"ok","authors":{"1":{"U":"//en.wiktionary.org","id":1,"N":"en.wiktionary.org"},"20":{"U":"//www.slowniki.org.pl/","id":20,"N":"Jerzy Kazojc"},"86":{"U":null,"id":86,"N":"wiki"},"25018":{"U":"//glosbe.com","id":25018,"N":"GlosbeResearch"},"2695":{"U":"//dumps.wikimedia.org/enwiktionary/latest/enwiktionary-latest-pages-articles.xml.bz2","id":2695,"N":"Wiktionary"}},"dest":"hun","phrase":"cat","tuc":[{"authors":[86],"meaningId":-4164218657921168000,"meanings":[{"text":"member of Felidae","language":"eng"},{"text":"domestic species","language":"eng"},{"text":"A common four-legged animal (Felis silvestris) that is often kept as a household pet.","language":"eng"},{"text":"ket","language":"eng"}],"phrase":{"text":"macska","language":"hun"}},{"authors":[2695],"meaningId":-9072797188187576000,"meanings":[{"text":"domestic species","language":"eng"}],"phrase":{"text":"kandúr","language":"hun"}},{"authors":[1],"meaningId":4566464096976442400,"meanings":[{"text":"domestic species","language":"eng"}],"phrase":{"text":"cica","language":"hun"}},{"authors":[25018],"meaningId":3489096155947903000,"phrase":{"text":"hány","language":"hun"}},{"authors":[25018],"meaningId":-557814434056432960,"phrase":{"text":"krapek","language":"hun"}},{"authors":[20],"meaningId":-2600640194269463000,"phrase":{"text":"muksó","language":"hun"}},{"authors":[25018],"meaningId":-4572067174236314000,"phrase":{"text":"rókázik","language":"hun"}},{"authors":[1],"meaningId":null,"meanings":[{"text":"An enthusiast or player of jazz.","language":"eng"}]},{"authors":[1],"meaningId":null,"meanings":[{"text":"(computing) A lsquo;catenate; program and command in Unix that reads one or more files and directs their content to an output device.","language":"eng"}]},{"authors":[1],"meaningId":null,"meanings":[{"text":"(slang, vulgar, African American Vernacular) A vagina; female external genitalia","language":"eng"}]},{"authors":[1],"meaningId":null,"meanings":[{"text":"(slang) To vomit something.","language":"eng"}]},{"authors":[1],"meaningId":null,"meanings":[{"text":"(Irish, informal) terrible, disastrous.","language":"eng"}]},{"authors":[1],"meaningId":null,"meanings":[{"text":"(archaic, uncountable) The game of ;trap and ball; (also called ;cat and dog;).","language":"eng"}]},{"authors":[1],"meaningId":null,"meanings":[{"text":"(slang) Any of a variety of earth-moving machines. (from their manufacturer Caterpillar Inc.)","language":"eng"}]},{"authors":[1],"meaningId":null,"meanings":[{"text":"raise anchor to cathead","language":"eng"}]},{"authors":[1],"meaningId":null,"meanings":[{"text":"(nautical) To flog with a cat-o-nine-tails.","language":"eng"}]},{"authors":[1],"meaningId":null,"meanings":[{"text":"vomit","language":"eng"}]},{"authors":[1],"meaningId":null,"meanings":[{"text":"(archaic) A sturdy merchant sailing vessel (now only in ;catboat;).","language":"eng"}]},{"authors":[1],"meaningId":null,"meanings":[{"text":"(slang) Prostitute. [from at least early 15th c.]","language":"eng"}]},{"authors":[1],"meaningId":null,"meanings":[{"text":"Any similar animal of the family Felidae, which includes lions, tigers, etc.","language":"eng"}]},{"authors":[1],"meaningId":null,"meanings":[{"text":"(nautical) Contraction of cat-o-nine-tails.","language":"eng"}]},{"authors":[1],"meaningId":null,"meanings":[{"text":"guy, fellow","language":"eng"}]},{"authors":[1],"meaningId":null,"meanings":[{"text":"(archaic, uncountable) The trap of the game of ;trap and ball;.","language":"eng"}]},{"authors":[1],"meaningId":null,"meanings":[{"text":"(slang) A person (usually male).","language":"eng"}]},{"authors":[1],"meaningId":null,"meanings":[{"text":"(nautical) To hoist (the anchor) by its ring so that it hangs at the cathead.","language":"eng"}]},{"authors":[1],"meaningId":null,"meanings":[{"text":"(computing slang) To dump large amounts of data on (an unprepared target) usually with no intention of browsing it carefully.","language":"eng"}]},{"authors":[1],"meaningId":null,"meanings":[{"text":"(derogatory) A spiteful or angry woman. [from earlier 13th c.]","language":"eng"}]},{"authors":[1],"meaningId":null,"meanings":[{"text":"A catfish.","language":"eng"}]},{"authors":[1],"meaningId":null,"meanings":[{"text":"A domesticated subspecies (Felis silvestris catus) of feline animal, commonly kept as a house pet. [from 8th c.]","language":"eng"}]},{"authors":[1],"meaningId":null,"meanings":[{"text":"(nautical) A strong tackle used to hoist an anchor to the cathead of a ship.","language":"eng"}]},{"authors":[1],"meaningId":null,"meanings":[{"text":"(computing) To apply the <b>cat</b> command to (a file).","language":"eng"}]},{"authors":[1],"meaningId":null,"meanings":[{"text":"strong tackle used to hoist an anchor to the cathead of a ship","language":"eng"}]},{"authors":[1],"meaningId":null,"meanings":[{"text":"A catamaran.","language":"eng"}]}],"from":"eng"}

I've struggled with something like this too. 我也为类似的事情而苦恼。 Try this: 尝试这个:

var ValueToSend = {'': jsonToSend };

$.ajax({
    url: '@Url.Action("Parse", "GetMeaning")',
    data: ValueToSend 
    type: 'POST',
    success:....

Notice that I removed contentType and dataType and that the json string is enclosed in an object with an empty property name. 注意,我删除了contentTypedataType ,并且json字符串包含在具有空属性名称的对象中。 This article helped: http://encosia.com/using-jquery-to-post-frombody-parameters-to-web-api/ Also make sure you have the routing correctly working on the server; 本文对您有所帮助: http : //encosia.com/using-jquery-to-post-frombody-parameters-to-web-api/还请确保您的路由在服务器上正确运行; I'd recommend leaving the URL hard-coded until you're sure you've got everyting working so I'd replace url: '@Url.Action("Parse", "GetMeaning")' with the actual route. 我建议您对URL进行硬编码,直到您确定一切正常为止,因此我将url: '@Url.Action("Parse", "GetMeaning")'替换为实际路由。

问题是ASP.NET阻止了Json,因为它由于<b></b>标记而将其视为安全隐患。

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

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