Запрос Json RPC через jquery getJSON

Я пытаюсь отправить запрос json-rpc на удаленный сервер с помощью метода jquery getJSON. Вот мой код:

json_string=JSON.stringify(obj);
var jqxhr = $.getJSON("https://91.199.226.106/ssljson.php?jsoncallback=?", json_string, function(data){
    alert("aaaaaa");
});
jqxhr.error(function() { alert("error"); })

Вот мой пример строки json-rpc:

{"jsonrpc":"2.0","method":"merchant_check","params":[{"hostID":150999,"orderID":116,"amount":"150","currency":"051","mid":15001038,"tid":15531038,"mtpass":"12345","trxnDetails":""}],"id":116}

И вот ошибка, которую я получаю:

{"jsonrpc":"2.0","id":null,"error":{"code":-32600,"message":"Invalid JSON-RPC 2.0 request error (-32600)"}}

Я не могу понять, в чем проблема. Я делаю что-то неправильно? Может быть, мне нужно отправить запрос с помощью php, а не jquery? Тогда как мне это сделать?


person Rafael Sedrakyan    schedule 09.04.2012    source источник
comment
Любая причина, по которой вы задали этот вопрос, не закрывая/переписывая другие (дублирующиеся) вопросы здесь:http://stackoverflow.com/questions/9988733/json-rpc-error-32600 и здесь:http://stackoverflow.com/questions/9871972/json-rpc-string   -  person David-SkyMesh    schedule 10.04.2012
comment
Добавлен тег jQuery, удален тег JSONP.   -  person David-SkyMesh    schedule 10.04.2012


Ответы (2)


getJSON, как следует из названия, отправит запрос GET, если вы хотите использовать JSON-RPC, вам нужно использовать POST, например:

var json_string = JSON.stringify(obj);
$.post('https://91.199.226.106/ssljson.php', json_string, function(response) {
   // process response
}, 'json');

но это будет работать, только если ваша страница находится на том же сервере, если вы не используете CORS.

person jcubic    schedule 29.07.2013

Это конкретное сообщение об ошибке предполагается, чтобы сообщить вам, что конверт сообщения недействителен в соответствии со спецификацией JSON-RPC 2.0 или что в самом JSON есть ошибка синтаксического анализа.

К сожалению, на практике многие сервисы возвращают эту ошибку при гораздо более широком разнообразии обстоятельств. (например: отсутствует токен аутентификации и т. д.)

Конкретные проблемы с вашим образцом сообщения?

Принимает ли веб-сервис GET запросов? (т.е. должно ли это быть POST вместо этого?)

Действительно ли веб-службе требуется бит ?jsoncallback=?? Обычно это запрос JSONP, а не JSON-RPC. Служба возвращает реальный статус ошибки JSON-RPC, поэтому я был бы очень удивлен, если бы ей понадобился этот параметр GET, и (в зависимости от конфигурации веб-службы) он мог бы интерпретироваться как часть конверта, что сделало бы его неверный запрос JSON-RPC!

Принимает ли merchant_check массив из одной или нескольких транзакций в качестве единственного параметра? Если нет, то у вас неправильный синтаксис для params. Некоторые службы хотят, чтобы params было Array, некоторые службы хотят, чтобы это было Object. Обратитесь к SMD/документации, чтобы определить, в каком случае.

Службе может потребоваться text/json (или что-то еще) в качестве mime-type для запроса.

Рекомендуемый подход:

Чтобы избежать этих проблем, вам, вероятно, следует начать с использования специально созданной библиотеки JSON-RPC, такой как предоставленная в наборе инструментов Dojo, и использовать SMD, опубликованный веб-службой, если она есть. (Я рекомендую не создавать сообщения JSON-RPC вручную).

person David-SkyMesh    schedule 10.04.2012