簡體   English   中英

在ajax調用中遇到解析錯誤,但數據已成功傳遞

[英]Getting a parse-error in ajax call but the data is getting passed successfully

因此,我有一個基本形式,該形式需要一個地址,獲取經度/緯度,然后我試圖將經度/緯度值傳遞給我的API。 該API正在獲取變量,但是在成功傳遞后,我的ajax調用中出現了解析錯誤。

<form method="GET">
     <input id="address" type="text">
     <button id='searchRadius' type="submit">Search</button>
</form>  

阿賈克斯電話

$('#searchRadius').on('click', function (e) {

    var lati;
    var lng;
    var rad = 30;
    var address = $('#address').val();


    e.preventDefault(); 


    $.ajax({
        type: "GET",
        url: "http://www.mapquestapi.com/geocoding/v1/address?key=LIhb6pFxB7qAlFC4Aiul9rM9i7R5BcgB&location=" + address,
        beforeSend: function (xhr) {
            xhr.setRequestHeader("Accept", "application/json");
            xhr.setRequestHeader("Content-type", "application/json");
        },
        success: function postForm(response) {
            lati = response.results[0].locations[0].latLng.lat;
            lng = response.results[0].locations[0].latLng.lng;

            console.log(lati, lng, rad);

            $.ajax({
                url: contextRoot + "/map/radius",
                type: "GET",
                data: {"lati": lati},
                dataType: "json",
                beforeSend: function (xhr) {
                    xhr.setRequestHeader("Accept", "application/json");
                    xhr.setRequestHeader("Content-type", "application/json");
                },
                success: function (data, status) {
                    console.log(data);

                },
                error: function (data, status) {
                    alert("bad api call");
                    console.log(status);
                }
            });
        },
        error: function (data, status) {
            console.log(data.errors);
        }}
    );
});  

api調用

 @RequestMapping(value = "/radius", method = RequestMethod.GET)
    @ResponseBody
    public String radiusSearch(HttpServletRequest request, Map model) {

        String n1 = request.getParameter("lati");

        return "redirect: /";
    }  

所以我得到參數“ lati”,但它不會重定向頁面,然后在第二個ajax調用中出現錯誤。 在傳遞變量之前是否需要JSON.Stringify變量? 我確實需要將變量“ lati”,“ lng”,“ rad”傳遞給api,但是我試圖讓它首先與它一起工作。

當您使用Ajax時,Spring控制器假定返回文本,String或json。 為什么?

因為您的Ajax成功方法希望接收文本,字符串或json。

這意味着您不能將重定向作為Ajax響應執行

因此,如果要返回lati變量的文本, lati執行以下操作:

@RequestMapping(value = "/radius", method = RequestMethod.GET)
@ResponseBody
public String radiusSearch(HttpServletRequest request, Map model) {

    String n1 = request.getParameter("lati");

    return n1;
}  

如果您想返回一些參數 ,那么可以,json是一個不錯的選擇。

您可以使用jackson-databind jar輕松完成此操作,您要做的就是返回一個包含這3個變量的對象,當然,您的控制器@ResponseBody需要@ResponseBody批注。

還有一件事,在客戶端Ajax調用上,您需要標記您希望接收json類型。 datatype: "json" ,如下所示:

$.ajax({
        type: "GET",
        url: "http://www.mapquestapi.com/geocoding/v1/address?


        datatype: "json"



key=LIhb6pFxB7qAlFC4Aiul9rM9i7R5BcgB&location=" + address,
        beforeSend: function (xhr) {
            xhr.setRequestHeader("Accept", "application/json");
            xhr.setRequestHeader("Content-type", "application/json");
        },
        success: function postForm(response) {
            lati = response.results[0].locations[0].latLng.lat;
            lng = response.results[0].locations[0].latLng.lng;

            console.log(lati, lng, rad);
});

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM