«отсутствует; перед оператором» ошибка для вызова getJSON - PullRequest
4 голосов
/ 24 марта 2011

Может кто-нибудь объяснить, пожалуйста, следующее. Я искал сеть целую вечность, пытаясь найти помощь, и я верю, что я делаю все правильно, но все еще получаю ошибки.

У меня на странице есть следующий скрипт:

        function GetPageAdvert2(url) {

            $.getJSON('http://url/servicename.asmx/CheckAdvert?callback=?', 
            {
                pagename:   url,
                success:    function(data) { alert(data) }
            });        
        };

А мой веб-сервис не возвращает ничего, кроме:

jsonp1301065851157('url/KiN_150x300.jpg');

Проблема в том, что когда я вызываю GetPageAdvert2, ничего не происходит.

Мой веб-сервис (написанный на VB.Net):

        <WebMethod()> _
<ScriptMethod(ResponseFormat:=ResponseFormat.Json, XmlSerializeString:=False, UseHttpGet:=True)> _
Public Sub CheckAdvert(ByVal pagename As String, ByVal callback As String)

    Dim pageUID As Integer = 0
    Dim advertURL As List(Of aU) = New List(Of aU)()

    Dim sss As String

    Using con As New System.Data.SqlClient.SqlConnection(My.Settings.sqlConnection2)

           SQL STUFF IN HERE
           the SELECT statement will return a value and place it in Variable SSS


    End Using

    Context.Response.ContentType = "application/json"
    Context.Response.Write(callback & "('" & sss & "');")
    Context.Response.End()


End Function

Ответ, который я получаю (в формате FF):

PARAMS:
callback    jsonp1300979718942
contentType application/json; charset=utf-8
pagename    default.html
success undefined

RESPONSE:
jsonp1301065851157('url/KiN_150x300.jpg');

Это, как я полагаю, в основном верно.

Однако «Оповещение (данные)» не производит ничего, кроме «undefined».

Ответы [ 2 ]

3 голосов
/ 24 марта 2011

Я думаю, что ваша функция должна выглядеть следующим образом:

function GetPageAdvert2(url) {
            $.getJSON("***URL HERE***.asmx/CheckAdvert?callback=?", 
            {
               pagename:  url,
               success: function(data){
                    alert(data);
               }
            });        
        }

Обратите внимание, что успех является свойством getJSON.У тебя это было снаружи

3 голосов
/ 24 марта 2011

При использовании JSONP вы не можете просто вернуть строку JSON, поскольку возвращенная строка будет фактически вставлена ​​в текущую страницу в новом элементе script.Вам необходимо вернуть действительный оператор JavaScript, который вызывает обработчик обратного вызова, в котором анализируется ответ.

На странице Википедии есть пример:

parseResponse({"Name": "Cheeso", Id : 1823, "Rank": 7})

Обратите внимание, что приведенный выше синтаксис не являетсядопустимый JSON, который в этом случае не нужен, поскольку вы передаете только объект JavaScript в буквенной нотации.

Более того, как сказал x10 в своем комментарии, jQuery изменяет ? в параметре запроса callbackк уникальной функции, которую вы должны вызвать, поэтому не просто скопируйте и вставьте приведенный выше пример, но замените parseResponse на упомянутый параметр.

Обновление: последняя вещь, которую выдолжны измениться параметры на jQuery.getJSON: синтаксис выглядит следующим образом:

jQuery.getJSON( url, [ data ], [ success(data, textStatus, jqXHR) ] )

Таким образом, вы просто должны передать свою функцию успеха в качестве второго или третьего параметране как часть объекта (сравните это с общим вызовом функции jQuery.ajax()):

$.getJSON("***URL***.asmx/CheckAdvert?callback=?", function(data) { callback(data) });
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...