2013-05-06 4 views
0

Я пытаюсь заставить JSONP работать с сервером, работающим на Arduino. Это мой JS код:Проблема с обратным вызовом JSONP

window.onload = init; 

function init() 
{ 
    //alert("Test"); 
    SendRequest(); 
} 

function SendRequest() 
{ 
    alert("Sending request"); 
    var url = "http://192.168.1.177"; 
    var request = new XMLHttpRequest(); 
    request.open("GET", url); 
    request.error = function(e) { 
      alert("ERROR"); 
     }; 
    request.send(null); 
} 


function ArduinoJSONP() 
{ 
    alert("Callback received!!!"); 
} 

Функция обратного вызова никогда не достигается.

Но если я просто направить свой браузер непосредственно к Arduino IP я вижу следующее отображается в браузере:

ArduinoJSONP({"data": 12345}) 

Таким образом, кажется, что сервер посылает ответ с правильным форматом JSONP, но как-то функция не вызывается. Есть ли что-то еще, что мне нужно для JS для вызова функции? Я даже попытался переместить функцию в тело HTML, но это тоже не помогло.

спасибо.

ответ

1

Вы вообще не обрабатываете ответ сервера. Если вы делаете это без каких-либо библиотек, вам нужно вернуть eval результат, который был возвращен сервером.

И на самом деле реализация JSONP не XHR, вы должны ввести ее как тег скрипта в html с правильным атрибутом src.

Просто используйте библиотеку, у которой уже есть вся эта логика, абстрагированная для вас.

Просто впрыснуть сценарий тег в HTML дерево:

function SendRequest() 
{ 
    var element = document.createElement('script'); 
    var s = document.getElementsByTagName('script')[0]; 
    element.type = 'text/javascript'; 
    element.async = true; 
    element.src = 'http://192.168.1.177'; 
    s.parentNode.insertBefore(element, s); 
} 

Вы можете пометить его с уникальным идентификатором. Подключить к событию onload и после этого удалить этот скрипт.

+0

спасибо. Я новичок в этом, поэтому, пожалуйста, несите меня о деталях. Ты прав. JSONP не является XHR, но сервер Arduino не может обрабатывать запрос JSONP, поэтому я использую XHR, чтобы установить соединение с сервером Arduino. Сервер увидит соединение с клиентом и ответит с помощью JSONP. – madu

+1

Хорошо, см. Мой обновленный ответ, с базовой реализацией. –

+0

Спасибо. Это сработало! Я не знал о необходимости элемента «script». Будет больше читать. Большое спасибо. – madu

Смежные вопросы