Вызов jQuery AJAX с несколькими объектами для параметра данных - PullRequest
0 голосов
/ 24 февраля 2011

Я пытаюсь сделать что-то вроде следующего:

$.ajax({
    url: "/Track/Search",
    type: "POST",
    data: {
        startLatLng : { Latitude: firstClickLatLng.lat(), Longitude : firstClickLatLng.lng() },
        endLatLng : { Latitude: secondClickLatLng.lat(), Longitude: secondClickLatLng.lng() }
    },
    dataType: "json",
    success: function (msg) {
        alert("Ah har!: " + msg);
    }
});

Со следующей подписью действия:

[HttpPost]
public ActionResult Search(LatLng startLatLng, LatLng endLatLng)

И определение класса для LatLng выглядит следующим образом:

public class LatLng
{
    public float Latitude { get; set; }
    public float Longitude { get; set; }
}

Но когда я отлаживаю на сервере, поля Longitude и Latitude всегда равны нулю или равны нулю. На стороне клиента это не так. Я предполагаю, что просто делаю что-то не так с моим хэшем данных в вызове jQuery.

Есть идеи?


EDIT

Все еще не повезло:

var myData = {
    startLatLng: { Latitude: firstClickLatLng.lat(), Longitude: firstClickLatLng.lng() },
    endLatLng: { Latitude: secondClickLatLng.lat(), Longitude: secondClickLatLng.lng() }
};
$j.ajax({
    url: "/Track/Search",
    type: "POST",
    data: JSON.stringify(myData),
    dataType: "json",
    success: function (msg) {
        alert("Ah har!: " + msg);
    }
});

Вызов сделан на сервер, но данных пока нет. Поля, такие как firstClickLatLng.lat (), определенно содержат данные.

Ответы [ 3 ]

0 голосов
/ 24 февраля 2011

Ваш сервер получает строку JSON из POST, и он не может автоматически создавать собственные объекты так, как вы ожидаете.Вам необходимо использовать некоторую функцию для обработки строки в собственный объект в вашем коде на стороне сервера, прежде чем вызывать search().В псевдокоде:

var s = JSON.parse(recievedPostString); // convert post string to native obj or array
search( s.startLatLng, s.endLatLng ); // call your function

Также попробуйте явно преобразовать ваш объект данных в строку в вашем клиентском JavaScript:

...
data: JSON.stringify({ //JSON.stringify isn't multiplatform, use a wrapper for IE7 or below.
    startLatLng : { Latitude: firstClickLatLng.lat(), Longitude : firstClickLatLng.lng() },
    endLatLng : { Latitude: secondClickLatLng.lat(), Longitude: secondClickLatLng.lng() }
}),
...
0 голосов
/ 24 февраля 2011

Следующее работает нормально:

data: "{'startLatLng': { 'Latitude': '" + firstClickLatLng.lat() + "', 'Longitude': '" + firstClickLatLng.lng() + "'}, 'endLatLng': {'Latitude': '" + secondClickLatLng.lat() + "', 'Longitude': '" + secondClickLatLng.lng() + "'}}"

На самом деле немного расстраивает, и я не уверен, почему это сработало, а другие решения не сработали.

0 голосов
/ 24 февраля 2011

Вам необходимо преобразовать объект JSON в строку. Прототип имеет метод . Вы также можете использовать JSON.stringify

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...